我知道,我们可以复制或附加数组的元素。但是,我在一个数组中有大约 100 个元素。有没有其他可用的方法,所以我可以将数组附加到第一个数组。
考虑我有这两个数组。
String name1[]={"abc", "def", "ghi"};
String name2[]={"jkl", "mno", "pqr"};
我想在 name1 的末尾附加 name2 数组。
请帮我。
将不胜感激。
番石榴提供Arrays.concat(T[], T[], Class<T>)
.
参数 FYI的原因Class
是因为泛型数组具有明显的向上转换趋势。如果你这样做了Arrays.concat(Integer[], Long[])
,你想要一个Object[]
背部吗?还是一个Number[]
?Guava 让你指定,所以没有歧义......而且因为所有替代方案都可能导致ClassCastException
运行时不可预测的 s 。
(披露:我为 Guava 做出了贡献。)
您将不得不创建一个新数组。
使用泛型而不使用任何外部库的简单实现:
public static void main(String[] args) {
String [] a1 = { "a", "b" };
String [] a2 = { "c", "d", "e", "f" };
System.out.println(Arrays.toString(append(a1, a2)));
}
public <K> K[] append(K[] a1, K[] a2) {
K[] a1a2 = Arrays.copyOf(a1, a1.length + a2.length);
for (int i = a1.length; i < a1a2.length; i++) {
a1a2[i] = a2[i - a1.length];
}
return a1a2;
}
OBS:正如 Louis Wasserman 在他的回答中评论的那样,Java 将向上转换数组,这可能是一个问题。例如,如果您为上面的 append 方法提供 Long[] 和 Integer[],它将编译但您将java.lang.ArrayStoreException
在运行时得到一个!!
您将不得不创建一个新数组。因为数组的长度是固定的。
String[] list = new String[name1.length+name2.length]
您可以循环两个数组并将每个元素添加到新数组
你也可以使用 apache commons lang library
String[] both = ArrayUtils.addAll(first, second);