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

在java中如何将整个第二个数组附加到第一个数组,java,arrays,append,concat,Java,Arrays,Append,Concat,我知道,我们可以复制或附加数组的元素。但是,我在一个数组中有大约100个元素。是否有其他方法可以将数组附加到第一个数组中 假设我有两个数组 String name1[]={"abc", "def", "ghi"}; String name2[]={"jkl", "mno", "pqr"}; 我想在name1的末尾追加name2数组 请帮帮我 非常感谢您的帮助。您必须创建一个新阵列。因为数组的长度是固定的 String[] list = new String[name1.length+na

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

假设我有两个数组

 String name1[]={"abc", "def", "ghi"};
 String name2[]={"jkl", "mno", "pqr"};
我想在name1的末尾追加name2数组

请帮帮我


非常感谢您的帮助。

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

 String[] list = new String[name1.length+name2.length]
您可以围绕这两个数组循环,并将每个元素添加到新数组中

您还可以使用ApacheCommonsLang库

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

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

 String[] list = new String[name1.length+name2.length]
您可以围绕这两个数组循环,并将每个元素添加到新数组中

您还可以使用ApacheCommonsLang库

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

之所以使用
参数FYI,是因为泛型数组具有明显的上抛趋势。如果执行了
Arrays.concat(整数[],长[])
,是否要返回
对象[]
?还是一个
编号[]
?Guava让您指定,这样就不会有歧义……而且因为所有的备选方案都可能在运行时导致不可预测的
ClassCastException
s

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

提供

之所以使用
参数FYI,是因为泛型数组具有明显的上抛趋势。如果执行了
Arrays.concat(整数[],长[])
,是否要返回
对象[]
?还是一个
编号[]
?Guava让您指定,这样就不会有歧义……而且因为所有的备选方案都可能在运行时导致不可预测的
ClassCastException
s


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

你必须创建一个新阵列

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

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;
}
publicstaticvoidmain(字符串[]args){
字符串[]a1={“a”,“b”};
字符串[]a2={“c”、“d”、“e”、“f”};
System.out.println(Arrays.toString(append(a1,a2));
}
公共K[]追加(K[]a1,K[]a2){
K[]a1a2=数组.copyOf(a1,a1.length+a2.length);
对于(int i=a1.length;i

OBS:正如Louis Wasserman在他的回答中所评论的,Java将向上投射数组,这可能是一个问题。例如,如果您向上面的append方法提供一个Long[]和一个Integer[],它将被编译,但您将在运行时得到一个
java.lang.ArrayStoreException

您必须创建一个新数组

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

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;
}
publicstaticvoidmain(字符串[]args){
字符串[]a1={“a”,“b”};
字符串[]a2={“c”、“d”、“e”、“f”};
System.out.println(Arrays.toString(append(a1,a2));
}
公共K[]追加(K[]a1,K[]a2){
K[]a1a2=数组.copyOf(a1,a1.length+a2.length);
对于(int i=a1.length;i

OBS:正如Louis Wasserman在他的回答中所评论的,Java将向上投射数组,这可能是一个问题。例如,如果您向上面的append方法提供一个Long[]和一个Integer[],它将被编译,但您将在运行时得到一个
java.lang.ArrayStoreException

我刚检查过,但ArrayUtils返回的是Object[]而不是String数组…如果我出错,请纠正我。我可能错了。但是数组可以被浇铸。(注意这一点)对强制转换的数组要非常小心——它的行为不会像普通的
字符串[]
。我刚检查过,但ArrayUtils返回的是Object[]而不是字符串数组……如果我出错,请纠正我。我可能错了。但是数组可以被浇铸。(注意这一点)对强制转换的数组要非常小心——它的行为不会像普通的
字符串[]
。向上转换的好处是。。。我在这里作为答案编写的实现只有在提供整数和长数组的情况下才会在运行时中断……是的,这是正确的;它会坏的。(相反,Apache的
ArrayUtils
只会给您一个
对象[]
,您可以使用不安全的警告对其进行强制转换,但这是不安全的:它可能会在以后导致不可预知的
ClassCastException
s。)在我的回答中添加了一个警告。谢谢你的澄清。关于向上投射的观点很好。。。我在这里作为答案编写的实现只有在提供整数和长数组的情况下才会在运行时中断……是的,这是正确的;它会坏的。(相反,Apache的
ArrayUtils
只会给您一个
对象[]
,您可以使用不安全的警告对其进行强制转换,但这是不安全的:它可能会在以后导致不可预知的
ClassCastException
s。)在我的回答中添加了一个警告。谢谢你的澄清。