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 风格
⚠️ 注意:+ 是不可变操作,不会改变 arr1arr2

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)

✅ 优势:

  • 可灵活调整元素顺序
  • 支持插入字面量或其他变量
  • 一行搞定,无需调用额外方法

⚠️ 注意事项:

  • 必须使用 * 展开数组,否则会被当作单个元素处理
  • 若处理的是泛型数组,需结合 inlinereified 类型参数确保类型安全

6. 手动遍历实现

如果你追求极致性能控制,或者出于学习目的想了解底层原理,也可以手动实现数组合并。

步骤如下:

  1. 创建一个新数组,长度为两数组之和
  2. 依次遍历两个数组,逐个复制元素

完整实现:

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


原始标题:Combining Two Arrays in Kotlin