有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

认为我有这两个数组。

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

我想在name1的末尾追加name2数组

请帮帮我

我将非常感谢您的帮助


共 (3) 个答案

  1. # 1 楼答案

    您必须创建一个新数组

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

    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. # 2 楼答案

    Guava提供了^{}

    之所以使用Class参数FYI,是因为泛型数组有明显的向上投射的趋势。如果你做了Arrays.concat(Integer[], Long[]),你想要回Object[]吗?还是Number[]?番石榴让你指定,所以没有歧义。。。而且因为所有的替代方案都可能在运行时导致不可预测的ClassCastException

    (披露:我为番石榴捐款。)

  3. # 3 楼答案

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

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

    您可以围绕这两个数组循环,并将每个元素添加到新数组中

    您还可以使用ApacheCommonsLang库

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