使用System.arraycopy复制到ArrayList时获取异常,gets:ArrayStoreException:null

时间:2013-02-18 14:36:21

标签: java arrays arraylist

尝试复制两个数组时遇到了一些麻烦。 请考虑以下简单代码:

    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 个答案:

答案 0 :(得分:12)

System.arraycopy要求数组(例如Integer [])作为数组参数,而不是ArrayLists。

如果您希望复制此类列表,请执行以下操作:

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

答案 1 :(得分:3)

您需要Collections#copy

Collections.copy(t1,t2);

它会将t1列表中的所有元素复制到t2。

答案 2 :(得分:1)

如果有人想要只添加第二个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

答案 3 :(得分:0)

更容易:

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

或者是否已经创建了t2

t2.clear();
t2.addAll(t1);