5

2 つの配列をコピーしようとしているときに問題が発生しました。次の簡単なコードを検討してください。

    ArrayList<Integer> t1 = new ArrayList<Integer>();
    Integer i1 = new Integer(1);
    Integer i2 = new Integer(2);
    t1.add(i1);
    t1.add(i2);

    ArrayList<Integer> t2 = new ArrayList<Integer>();
    System.arraycopy(t1, 0, t2, 0, t1.size());

コンソールの表示: java.lang.ArrayStoreException: null 。このコードのどこが間違っている可能性がありますか、または別の方法でどうすればよいですか。簡単な質問かもしれませんが、申し訳ありませんが、私はこれに数時間立ち往生しており、修正できません。

4

4 に答える 4

12

System.arraycopy は、ArrayLists ではなく、配列パラメーターとして配列 (Integer[] など) を想定しています。

このようなリストのコピーを作成したい場合は、次のようにします。

List<Integer> t2 = new ArrayList<Integer>(t1);
于 2013-02-18T14:37:53.733 に答える
3

あなたが必要Collections#copy

Collections.copy(t1,t2);

t1 リストのすべての要素を t2 にコピーします。

于 2013-02-18T14:40:17.110 に答える
1

2 番目の ArrayList の一部だけを追加したい場合は、次のようにします。

ArrayList<Integer> t1 = new ArrayList<Integer>();
Integer i1 = new Integer(1);
Integer i2 = new Integer(2);
Integer i3 = new Integer(3);
t1.add(i1);
t1.add(i2);
t1.add(i3);

ArrayList<Integer> t2 = new ArrayList<Integer>();

/*
 * will add only last two integers
 * as it creates a sub list from index 1 (incl.)
 * to index 3 (excl.)
 */
t2.addAll(t1.subList(1, 3));

System.out.println(t2.size()); // prints 2
System.out.println(t2.get(0)); // prints 2
System.out.println(t2.get(1)); // prints 3
于 2015-02-03T10:49:39.483 に答える
0

より簡単に:

ArrayList<Integer> t2 = new ArrayList<Integer>(t1);

または t2 がすでに作成されている場合

t2.clear();
t2.addAll(t1);
于 2013-02-18T14:45:19.920 に答える