上一篇                     
               
			  如何连接Java数组
- 后端开发
- 2025-06-08
- 3925
 在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及可靠三方库的组合,可高效解决各类数组连接需求,根据实际项目环境和数据类型选择最匹配方案,兼顾性能与代码可维护性。
 
 
 
			 
			 
			 
			 
			 
			 
			 
			