0

配列の要素をコピーまたは追加できます。しかし、配列には約100個の要素があります。最初の配列に配列を追加できるように、他に利用可能な方法はありますか。

この 2 つの配列があるとします。

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

name1 の末尾に name2 配列を追加したい。

私を助けてください。

助けに感謝します。

4

3 に答える 3

3

グアバは提供しますArrays.concat(T[], T[], Class<T>)

ClassパラメータFYIの理由は、ジェネリック配列は明らかにアップキャストする傾向があるためです。もしそうなら、あなたは背中Arrays.concat(Integer[], Long[])が欲しかったですか?Object[]またはNumber[]ClassCastExceptionGuavaは、あいまいさがないように指定します...そして、すべての選択肢が実行時に予測できないにつながる可能性があるためです。

(開示:私はグアバに貢献します。)

于 2012-05-31T11:49:56.480 に答える
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実行時に が得られます!!

于 2012-05-31T11:55:25.487 に答える
1

新しいアレイを作成する必要があります。配列の長さは固定されているためです。

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

2 つの配列をループして、各要素を新しい配列に追加できます。

apache commons lang ライブラリを使用することもできます

 String[] both = ArrayUtils.addAll(first, second);
于 2012-05-31T11:44:27.607 に答える