行业资讯 2025年08月6日
0 收藏 0 点赞 501 浏览 2845 个字
摘要 :

文章目录 1. 使用“for 循环”连接数组 2.使用System.arraycopy() 3. 使用 Stream.concat() 合并数组 4.Apache Commons 的 ArrayUtils 5.Guava API 六,结论 学习连接两……




  • 1. 使用“for 循环”连接数组
  • 2.使用System.arraycopy()
  • 3. 使用 Stream.concat() 合并数组
  • 4.Apache Commons 的 ArrayUtils
  • 5.Guava API
  • 六,结论

学习连接两个基本数组或对象数组以创建一个由两个数组中的元素组成的新数组。我们将学习使用简单的for 循环、Stream API和其他实用程序类来合并数组项。

请注意,无论我们使用哪种技术来合并数组,它总是会创建一个具有两个数组长度组合的新数组,然后在循环中一次一个地将两个数组中的元素复制到新数组中。因此,下面讨论的各种方法之间的主要区别是代码的可读性和易用性。

1. 使用“for 循环”连接数组

直接使用for循环合并数组在性能上是最高效的。它不会创建不必要的临时变量和对象。

我们创建一个由两个给定数组的组合长度组成的新数组,然后开始循环将两个数组中的元素放入新数组中。理论上,这种方法应该能提供最佳性能。

int[] intArray1 = {1, 2, 3};
int[] intArray2 = {4, 5, 6};
result = new int[intArray1.length + intArray2.length];
int index = 0;
for (int item: intArray1) {
  result[index++] = item;
}
for (int item: intArray2) {
  result[index++] = item;
}
System.out.println(Arrays.toString(result)); //[1, 2, 3, 4, 5, 6]

2.使用System.arraycopy()

使用arraycopy()相当于使用for 循环。这里我们将把数组项复制到新数组的任务委托给native函数 arraycopy()

就性能而言,arraycopy()方法的性能应与for 循环方法相当。

int[] intArray1 = {1, 2, 3};
int[] intArray2 = {4, 5, 6};
int[] result = new int[intArray1.length + intArray2.length];
System.arraycopy(intArray1, 0, result, 0, intArray1.length);
System.arraycopy(intArray2, 0, result, intArray1.length, intArray2.length);
System.out.println(Arrays.toString(result)); //[1, 2, 3, 4, 5, 6]

我们可以编写一个泛型类型方法,可用于合并包含任何对象类型的项的数组。

static <T> T[] concatArrays(T[] array1, T[] array2) {
    T[] result = Arrays.copyOf(array1, array1.length + array2.length);
    System.arraycopy(array2, 0, result, array1.length, array2.length);
    return result;
}
//Invoking the method
String[] resultObj = concatArrays(strArray1, strArray2);
System.out.println(Arrays.toString(resultObj)); //[1, 2, 3, 4, 5, 6]

3. 使用 Stream.concat() 合并数组

stream.concat()方法创建一个延迟连接的流,其元素是第一个流的所有元素,后跟第二个流的所有元素。

为了获得流,我们将数组转换为流,然后用concat()来合并流。稍后,我们可以将流项收集到一个数组中以完成合并过程。

String[] strArray1 = {\"1\", \"2\", \"3\"};
String[] strArray2 = {\"4\", \"5\", \"6\"};
String[] both = Stream.concat(Arrays.stream(strArray1),
                                Arrays.stream(strArray2))
                            .toArray(String[]::new);

我们可以使用这种技术在一条语句中连接两个以上的数组

String[] mergedArray = Stream.concat(Arrays.stream(strArray1),
                                Arrays.stream(strArray2),
                                Arrays.stream(strArray3),
                                Arrays.stream(strArray4))
                            .toArray(String[]::new);

要合并基本数据类型数组,我们可以直接使用以下类:

  • IntStream
  • LongStream
  • DoubleStream

这些类提供了针对这些基本数据类型特定的concat()方法。

int[] intArray1 = {1, 2, 3};
int[] intArray2 = {4, 5, 6};
int[] result = IntStream.concat(Arrays.stream(intArray1),
                                    Arrays.stream(intArray2))
                                .toArray();

4.Apache Commons 的 ArrayUtils

我们可以使用第三部分库,它提供了易于使用的一行方法来合并数组。它们还提供与以前的方法相同水平的性能。

类似的 API 是ArrayUtils.addAll()将给定数组的所有元素添加到一个新数组中。请注意,返回的数组始终返回一个新数组,即使我们正在合并两个数组并且其中一个数组是null

String[] resultObj = ArrayUtils.addAll(strArray1, strArray2);
int[] result = ArrayUtils.addAll(intArray1, intArray2);

5.Guava API

Guava API 提供了以下类,我们可以使用它们来合并基元数组以及对象类型数组。

  • Ints.concat(): 连接两个int数组。
  • Longs.concat(): 连接两个long数组。
  • Doubles.concat(): 连接两个double数组。
  • ObjectArrays.concat():连接两个object类型数组。
String[] resultObj = ObjectArrays.concat(strArray1, strArray2, String.class);
int[] result = Ints.concat(intArray1, intArray2);

六,结论

在本教程中,我们学习了在 Java 中合并两个数组。我们学习了如何使用本机 Java API 以及来自第 3 方库的实用程序类。

对于小型阵列,上述所有方法都将提供几乎相同水平的性能。对于大型阵列,建议在最终确定该方法之前进行性能测试。然而从理论上讲,使用for-loop和arraycopy()方法应该提供最佳性能。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9247.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号