如何将整个第二个数组附加到java中的第一个数组

时间:2012-05-31 11:42:48

标签: java arrays append concat

我知道,我们可以复制或追加数组的元素。但是,我在一个数组中有大约100个元素。有没有其他方法可用,所以我可以将数组附加到第一个数组。

考虑我有这两个阵列。

 String name1[]={"abc", "def", "ghi"};
 String name2[]={"jkl", "mno", "pqr"};

我想在name1的末尾添加name2数组。

请帮帮我。

非常感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

Guava提供Arrays.concat(T[], T[], Class<T>)

Class参数FYI的原因是因为通用数组具有明显的上升趋势。如果你Arrays.concat(Integer[], Long[]),你想要Object[]回来吗?还是Number[]? Guava让你指定所以没有歧义...并且因为所有的替代方案都可能在运行时导致不可预测的ClassCastException

(披露:我向Guava捐款。)

答案 1 :(得分:2)

您必须创建一个新阵列。

使用泛型而不使用任何外部库的简单实现:

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 !!

答案 2 :(得分:1)

您必须创建一个新阵列。因为数组的长度是固定的。

 String[] list = new String[name1.length+name2.length]

您可以循环两个数组并将每个元素添加到新数组

你也可以使用apache commons lang library

 String[] both = ArrayUtils.addAll(first, second);