1. 概述
数组是计算机科学中最基础且关键的数据结构之一,许多高级集合类型都建立在其之上。在 Kotlin 开发中,我们经常会遇到需要将两个数组合并成一个的场景。
本文将系统介绍在 Kotlin 中合并数组的几种主流方式,帮助你在实际项目中选择最合适的方法,避免踩坑✅。
2. 什么是“合并数组”
所谓合并数组,指的是将两个数组的所有元素按顺序整合到一个新的数组中。这个操作也常被称为“拼接”或“连接”。注意:它不同于“归并排序”中的合并(不涉及排序逻辑)。
例如:
arr1 = [1, 2, 3]
arr2 = [4, 5, 6]
合并后的结果应为:
[1, 2, 3, 4, 5, 6]
⚠️ 注意:所有方法都不会修改原始数组,而是返回一个新数组——这是函数式编程的典型特征。
3. 使用 plus
方法
Kotlin 的 Array<T>
类原生提供了 plus
方法,支持传入单个元素、集合或另一个数组,并返回包含所有元素的新数组。
示例代码如下:
val arr1 = arrayOf(1, 2, 3)
val arr2 = arrayOf(4, 5, 6)
// [1, 2, 3, 4, 5, 6]
val mergedArray = arr1.plus(arr2)
✅ 优点:语义清晰,API 官方支持
❌ 缺点:方法名略长,不够简洁
4. 使用 +
操作符
Kotlin 支持操作符重载,+
操作符在底层就是调用 plus
方法,因此它是 plus
的语法糖。
使用方式更简洁:
val arr1 = arrayOf(1, 2, 3)
val arr2 = arrayOf(4, 5, 6)
// [1, 2, 3, 4, 5, 6]
val mergedArray = arr1 + arr2
✅ 推荐指数高:代码简洁、可读性强,符合 Kotlin 风格
⚠️ 注意:+
是不可变操作,不会改变 arr1
或 arr2
5. 使用 arrayOf
配合展开操作符(Spread Operator)
Kotlin 提供了 arrayOf()
函数用于创建数组,其参数为 varargs
类型。通过 **展开操作符 *
**,我们可以将数组“打散”为多个独立参数传入。
这种方式灵活性最高,可以自由控制元素顺序,甚至插入额外元素。
基本用法
val arr1 = arrayOf(1, 2, 3)
val arr2 = arrayOf(4, 5, 6)
// [1, 2, 3, 4, 5, 6]
val mergedArray = arrayOf(*arr1, *arr2)
高级用法:插入中间元素
val arr1 = arrayOf(1, 2, 3)
val arr2 = arrayOf(4, 5, 6)
val middleElement = 0
// [4, 5, 6, 0, 1, 2, 3]
val mergedArray = arrayOf(*arr2, middleElement, *arr1)
✅ 优势:
- 可灵活调整元素顺序
- 支持插入字面量或其他变量
- 一行搞定,无需调用额外方法
⚠️ 注意事项:
- 必须使用
*
展开数组,否则会被当作单个元素处理 - 若处理的是泛型数组,需结合
inline
和reified
类型参数确保类型安全
6. 手动遍历实现
如果你追求极致性能控制,或者出于学习目的想了解底层原理,也可以手动实现数组合并。
步骤如下:
- 创建一个新数组,长度为两数组之和
- 依次遍历两个数组,逐个复制元素
完整实现:
fun combine(arr1: Array<Int>, arr2: Array<Int>): Array<Int> {
val mergedArray = Array(arr1.size + arr2.size) { 0 }
var position = 0
for (element in arr1) {
mergedArray[position] = element
position++
}
for (element in arr2) {
mergedArray[position] = element
position++
}
return mergedArray
}
val arr1 = arrayOf(1, 2, 3)
val arr2 = arrayOf(4, 5, 6)
// [1, 2, 3, 4, 5, 6]
val mergedArray = combine(arr1, arr2)
✅ 适用场景:
- 对性能有严格要求(避免函数调用开销)
- 需要自定义合并逻辑(如去重、过滤等)
❌ 不推荐日常使用:代码冗长,易出错,违背 Kotlin 简洁哲学
7. 总结与建议
方法 | 推荐程度 | 适用场景 |
---|---|---|
+ 操作符 |
✅✅✅✅✅ | 日常开发首选,简洁高效 |
plus() 方法 |
✅✅✅✅ | 语义明确,适合表达式中使用 |
arrayOf(*arr1, *arr2) |
✅✅✅✅ | 需要插入额外元素或调整顺序时 |
手动循环 | ✅✅ | 学习理解或特殊定制需求 |
📌 最佳实践建议:
- 优先使用
+
操作符,代码最简洁 - 复杂拼接逻辑使用展开操作符
*
- 避免重复造轮子,除非有特殊优化需求
示例代码已托管至 GitHub:https://github.com/baeldung/kotlin-tutorials/tree/master/core-kotlin-modules/core-kotlin-arrays