上一篇
如何连接Java数组
- 后端开发
- 2025-06-08
- 3006
在Java中连接数组通常使用
System.arraycopy()
方法或循环复制元素,也可以利用
Arrays.copyOf()
结合
Arrays.copyOfRange()
实现,Java 8及以上版本推荐使用
Stream.of()
和
flatMap()
合并数组,或借助第三方库如Apache Commons Lang的
ArrayUtils.addAll()
。
在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更现代
- 已使用Apache Commons → 选
注意内存分配:所有方法均创建新数组,原始数组不受影响,超大数组操作时需评估内存开销。
引用说明
System.arraycopy()
– Java官方文档:Oracle Arraycopy- Apache Commons Lang 3.12文档:ArrayUtils
- Java Stream API规范:Java 8 Stream
通过标准库方法、现代API及可靠三方库的组合,可高效解决各类数组连接需求,根据实际项目环境和数据类型选择最匹配方案,兼顾性能与代码可维护性。