如何连接Java数组
- 后端开发
- 2025-06-08
- 7
在Java中连接数组是将多个数组合并为一个新数组的常见操作,以下是5种专业、高效且可读性强的方法,适用于不同场景:
手动循环复制(基础方法)
int[] arr1 = {1, 2}; int[] arr2 = {3, 4}; int[] result = new int[arr1.length + arr2.length]; // 复制第一个数组 for (int i = 0; i < arr1.length; i++) { result[i] = arr1[i]; } // 复制第二个数组 for (int i = 0; i < arr2.length; i++) { result[arr1.length + i] = arr2[i]; } // 输出:[1, 2, 3, 4] System.out.println(Arrays.toString(result));
适用场景:小型数组或兼容性要求高的环境(如低版本JDK)

System.arraycopy()(高性能方案)
int[] arr1 = {10, 20}; int[] arr2 = {30, 40}; int[] result = new int[arr1.length + arr2.length]; // 参数说明:(源数组, 源起始索引, 目标数组, 目标起始索引, 复制长度) System.arraycopy(arr1, 0, result, 0, arr1.length); System.arraycopy(arr2, 0, result, arr1.length, arr2.length); // 输出:[10, 20, 30, 40] System.out.println(Arrays.toString(result));
优势:底层原生方法,执行效率最高
适用场景:大型数组或性能敏感场景
Arrays.copyOf() + arraycopy(简洁写法)
int[] arr1 = {100, 200}; int[] arr2 = {300, 400}; int[] result = Arrays.copyOf(arr1, arr1.length + arr2.length); // 将arr2追加到result尾部 System.arraycopy(arr2, 0, result, arr1.length, arr2.length); // 输出:[100, 200, 300, 400] System.out.println(Arrays.toString(result));
优点:代码更简洁,避免显式创建新数组
Java 8 Stream API(函数式编程)
Integer[] arr1 = {5, 6}; // 注意:需使用包装类型 Integer[] arr2 = {7, 8}; Integer[] result = Stream.concat(Arrays.stream(arr1), Arrays.stream(arr2)) .toArray(Integer[]::new); // 输出:[5, 6, 7, 8] System.out.println(Arrays.toString(result));
特点:

- 支持任意数量数组:Stream.of(arr1, arr2, arr3).flatMap(Arrays::stream)
- 可链式处理数据:.filter(x -> x>0).toArray()
局限:仅适用于对象类型数组(非基本类型)
Apache Commons Lang库
import org.apache.commons.lang3.ArrayUtils; int[] arr1 = {9, 8}; int[] arr2 = {7, 6}; int[] result = ArrayUtils.addAll(arr1, arr2); // 输出:[9, 8, 7, 6] System.out.println(Arrays.toString(result));
优势:

- 单行代码完成连接
- 支持基本类型和对象数组
- 可连接多个数组:ArrayUtils.addAll(arr1, arr2, arr3)
依赖添加(Maven):
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency>
方法对比与选型建议
| 方法 | 执行效率 | 代码简洁度 | 适用场景 |
|---|---|---|---|
| 手动循环 | JDK 1.0+ 基础项目 | ||
| System.arraycopy() | 高性能需求/大型数组 | ||
| Arrays.copyOf() | JDK 6+ 平衡简洁与性能 | ||
| Stream API | Java 8+ 复杂数据处理 | ||
| Apache Commons | 快速开发/多数组连接 |
最佳实践:
- 优先使用标准库:JDK自带方法(如arraycopy) 无外部依赖
- 考虑类型差异:
- 基本类型数组 → 选System.arraycopy()
- 对象类型数组 → 可选Stream API
- 项目规范:
- 已使用Apache Commons → 选ArrayUtils.addAll()
- Java 8+项目 → Stream API更现代
注意内存分配:所有方法均创建新数组,原始数组不受影响,超大数组操作时需评估内存开销。
引用说明
- System.arraycopy() – Java官方文档:Oracle Arraycopy
- Apache Commons Lang 3.12文档:ArrayUtils
- Java Stream API规范:Java 8 Stream
通过标准库方法、现代API及可靠三方库的组合,可高效解决各类数组连接需求,根据实际项目环境和数据类型选择最匹配方案,兼顾性能与代码可维护性。