2013-02-18 27 views
4

嘗試複製兩個數組時遇到一些麻煩。 考慮下面的簡單代碼:使用System.arraycopy複製到ArrayList時獲取異常,獲取:ArrayStoreException:null

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:空。 這段代碼有什麼問題,或者我怎樣用不同的方式來做。 對不起可能是一個簡單的問題,但我堅持了幾個小時,無法修復它。

回答

12

System.arraycopy需要數組(例如Integer [])作爲數組參數,而不是ArrayLists。

如果你希望做這樣一個列表的副本,只要做到以下幾點:

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

你需要Collections#copy

Collections.copy(t1,t2); 

它將複製所有從T1列表中的元素成T2。

0

簡單:

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

,或者如果T2已經創建

t2.clear(); 
t2.addAll(t1); 
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