2012-07-22 87 views
2

我有一組成對的列表。如果我使用平等,它會複製每一個集合?從一個列表複製到另一個

List<HashSet<Pair>> list1 = new ArrayList<HashSet<Pair>>(); 
List<HashSet<Pair>> list2 = new ArrayList<HashSet<Pair>>(); 

list1.add(0, new HashSet<Pair>()); 
list1.add(1, new HashSet<Pair>()); 
list1.add(2, new HashSet<Pair>()); 
list1.add(3, new HashSet<Pair>()); 

如果我做list2 = list1,它是否完美地複製?因爲當我使用它時,它會崩潰。

Iterator<Pair> it1 = list2.get(0).iterator(); 
Iterator<Pair> it2 = list2.get(1).iterator(); 
Iterator<Pair> it3 = list2.get(2).iterator(); 
Iterator<Pair> it4 = list2.get(3).iterator(); 
+1

你什麼堆棧跟蹤時崩潰? – 2012-07-22 17:54:42

回答

4
list2 = list1 

反映這種分配簡單地分配基準list2在同一個列表,list1點。 (注意,僅僅是有一個名單有兩個對它的引用)如果你要複製的列表,你需要使用拷貝構造函數:

list2 = new ArrayList<HashSet<Pair>>(list1); 
+0

謝謝,我正在學Java ... – jimmyC 2012-07-30 21:11:17

4

否。作業不會複製任何內容,而是將list2引用更新爲指向list1。所以你可以像使用list1那樣使用list2;不過您所做的更改爲2將在1

+1

這是在java中的任何容器相同嗎? – jimmyC 2012-07-22 18:01:22

+1

對於任何對象的引用都是一樣的。 – 2012-07-22 18:01:52

+1

簡而言之,您將**從不**使用賦值運算符在Java中複製任何內容。你可以得到的最遠是給另一個var分配一個「int」或類似的值。 – 2012-07-22 19:19:50

相關問題