「拼接」Java数组:5种经过验证的方法(含代码)
你好,同行!如果你正在阅读这篇文章,说明你遇到了每个Java开发者迟早都会面临的任务——如何在Java中合并两个数组?看起来很简单?直接加起来就行。但事实并非如此。Java没有像Python或JavaScript那样的原生数组连接运算符。于是,有趣的部分开始了。
在Stack Overflow上,问题「How can I concatenate two arrays in Java?」已经积累了数十万次浏览。这意味着即使是经验丰富的开发者有时也会在选择上感到困惑。在本教程中,我将向你展示5种可行的方法——从「老派」的手动复制到现代的Stream API。你将了解每种方法的优缺点,并能够选择最适合你任务的那一种。
我们开始吧!
为什么Java没有简单的数组合并方法?
Java中的数组是固定长度的对象。你不能简单地将一个数组「追加」到另一个数组的末尾。你需要创建一个新数组并将元素复制进去。但别担心——我会展示如何优雅且无痛地完成这件事。
方法1:手动复制(适合喜欢完全控制的人)
最直观、最清晰的方法。创建一个新数组,其长度等于两个原始数组长度之和,然后通过循环填充它。
public class ArrayConcatManual { public static void main(String[] args) { int[] array1 = {1, 2, 3}; int[] array2 = {4, 5, 6};
int[] result = new int[array1.length + array2.length];
// 复制第一个数组 for (int i = 0; i < array1.length; i++) { result[i] = array1[i]; }
// 复制第二个数组 for (int i = 0; i < array2.length; i++) { result[array1.length + i] = array2[i]; }
// 输出结果 for (int num : result) { System.out.print(num + " "); } // 输出:1 2 3 4 5 6 }}优点:完全控制,无需第三方库,易于阅读。
缺点:代码冗长,容易在索引上出错(特别是当数组超过两个时)。
建议:如果你想了解一切「底层」是如何工作的,或者你正在为教学目的编写代码,请使用此方法。
方法2:System.arraycopy() —— 标准工具
Java有一个内置方法System.arraycopy()。它比手动循环更快,因为它使用了本地方法(native method)。这是生产环境推荐的方法。
import java.util.Arrays;
public class ArrayConcatSystem { public static void main(String[] args) { String[] fruits1 = {"apple", "banana"}; String[] fruits2 = {"cherry", "date"};
String[] result = new String[fruits1.length + fruits2.length];
System.arraycopy(fruits1, 0, result, 0, fruits1.length); System.arraycopy(fruits2, 0, result, fruits1.length, fruits2.length);
System.out.println(Arrays.toString(result)); // 输出:[apple, banana, cherry, date] }}工作原理:
- 第一个参数——源数组。
- 第二个参数——源数组中的起始位置(通常为0)。
- 第三个参数——目标数组。
- 第四个参数——目标数组中的起始位置。
- 第五个参数——要复制的元素数量。
优点:快速、简洁、标准库。
缺点:需要留意索引,可能抛出ArrayIndexOutOfBoundsException。
方法3:ArrayList和集合 —— 灵活与便利
如果你不仅需要合并数组,还需要后续对它们进行操作(添加、删除