5

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

    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 期望数组(例如 Integer[])作为数组参数,而不是 ArrayLists。

如果您想复制这样的列表,只需执行以下操作:

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

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