尝试复制两个数组时遇到了一些麻烦。 请考虑以下简单代码:
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。 这段代码可能有什么问题,或者我怎么能以不同的方式做到这一点。 抱歉,这可能是一个简单的问题,但我已经坚持了几个小时,无法修复它。
答案 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);