1. 简介
数组结构 是我们日常开发中非常基础且常用的数据结构。除了用于存储各种类型的数据外,我们有时还需要对数组进行修改,例如在特定位置插入新元素。
本文将介绍几种在 Kotlin 中向数组指定位置插入元素的方法,适用于不同场景下的需求。
2. 使用循环和新数组
一种最直接的方法是创建一个比原数组大 1 的新数组,通过循环将原数组的元素逐个复制过去,并在指定位置插入新元素。
示例代码如下:
@Test
fun `insert array element at specific position using a loop and new array`(){
val array = arrayOf("one", "three", "four", "five")
val position = 1
val element = "two"
val newArray = Array(array.size + 1) { "" }
for (i in 0 until newArray.size) {
newArray[i] = array[if(i < position) i else i - 1]
}
newArray[position] = element
assertArrayEquals(arrayOf("one", "two", "three", "four", "five"), newArray)
}
✅ 优点:逻辑清晰,适合理解底层实现
❌ 缺点:代码量较多,效率略低
⚠️ 注意:position 越界需要自行判断
3. 使用 System.arraycopy()
该方法是对上一种方法的优化,使用 Java 提供的 System.arraycopy()
方法进行高效复制:
@Test
fun `insert array element at specific position using system arraycopy() and new array`(){
val array = arrayOf("one", "three", "four", "five")
val position = 1
val element = "two"
val newArray = Array(array.size + 1) { "" }
System.arraycopy(array, 0, newArray, 0, position)
newArray[position] = element
System.arraycopy(array, position, newArray, position + 1, array.size - position)
assertArrayEquals(arrayOf("one", "two", "three", "four", "five"), newArray)
}
✅ 优点:性能较好,适合处理较大数组
❌ 缺点:代码略显繁琐
⚠️ 建议:熟悉 Java 的开发者更适合使用此方法
4. 使用 copyOfRange() 方法
Kotlin 中的 copyOfRange()
方法允许我们复制数组中指定范围的元素,非常适合用来实现插入操作:
@Test
fun `insert array element at specific position using copyOfRange() method`(){
val array = arrayOf("one", "three", "four", "five")
val position = 1
val element = "two"
val newArray = array.copyOfRange(0, position) + element + array.copyOfRange(position, array.size)
assertArrayEquals(arrayOf("one", "two", "three", "four", "five"), newArray)
}
✅ 优点:代码简洁,语义清晰
❌ 缺点:涉及多次数组拼接,性能略差
⚠️ 注意:+
操作符在 Kotlin 中用于数组拼接时会生成新数组
5. 使用 sliceArray() 方法和加号操作符
sliceArray()
是 Kotlin 提供的一个数组切片函数,可以结合 +
操作符实现插入功能:
fun insertArrayElementUsingSliceMethodAndPlusOperator(array: Array<String>, position: Int, element: String): Array<String> {
return array.sliceArray(0 until position) +
element + array.sliceArray(position until array.size)
}
测试代码如下:
@Test
fun `insert array element at specific position using slice() and plus operator`() {
val array = arrayOf("one", "three", "four", "five")
val position = 1
val element = "two"
val newArray = insertArrayElementUsingSliceMethodAndPlusOperator(array, position, element)
assertArrayEquals(arrayOf("one", "two", "three", "four", "five"), newArray)
}
✅ 优点:语法简洁,可读性强
❌ 缺点:性能与 copyOfRange 类似,不适合大规模数组
⚠️ 建议:适合代码风格偏函数式、注重可读性的项目
6. 使用 MutableList 接口
Kotlin 提供了 MutableList
接口,支持在任意位置插入元素,使用非常方便:
fun insertArrayElementUsingMutableList(array: Array<String>, position: Int, element: String): Array<String> {
val mutableList = array.toMutableList()
mutableList.add(position, element)
return mutableList.toTypedArray()
}
测试代码如下:
@Test
fun `insert array element at specific position using mutabelist method`() {
val array = arrayOf("one", "three", "four", "five")
val position = 1
val element = "two"
val newArray = insertArrayElementUsingMutableList(array, position, element)
assertArrayEquals(arrayOf("one", "two", "three", "four", "five"), newArray)
}
✅ 优点:代码简洁,逻辑清晰
❌ 缺点:涉及类型转换,可能带来轻微性能损耗
⚠️ 建议:适合小型数组或对性能不敏感的场景
7. 总结
本文介绍了多种在 Kotlin 中向数组指定位置插入元素的方法,包括:
- 使用循环和新数组
- 使用
System.arraycopy
- 使用
copyOfRange
- 使用
sliceArray
和+
操作符 - 使用
MutableList
接口
每种方法都有其适用场景,开发者可根据实际需求选择最合适的实现方式。
完整示例代码请参考 GitHub 项目地址。