当前位置:首页 > 后端开发 > 正文

如何连接Java数组

在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));

优势:底层原生方法,执行效率最高
适用场景:大型数组或性能敏感场景

如何连接Java数组  第1张


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));

优势

  1. 单行代码完成连接
  2. 支持基本类型和对象数组
  3. 可连接多个数组: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 快速开发/多数组连接

最佳实践

  1. 优先使用标准库:JDK自带方法(如arraycopy) 无外部依赖
  2. 考虑类型差异
    • 基本类型数组 → 选System.arraycopy()
    • 对象类型数组 → 可选Stream API
  3. 项目规范
    • 已使用Apache Commons → 选ArrayUtils.addAll()
    • Java 8+项目 → Stream API更现代

注意内存分配:所有方法均创建新数组,原始数组不受影响,超大数组操作时需评估内存开销。


引用说明

  1. System.arraycopy() – Java官方文档:Oracle Arraycopy
  2. Apache Commons Lang 3.12文档:ArrayUtils
  3. Java Stream API规范:Java 8 Stream

通过标准库方法、现代API及可靠三方库的组合,可高效解决各类数组连接需求,根据实际项目环境和数据类型选择最匹配方案,兼顾性能与代码可维护性。

0