2016-03-27 96 views
0
public static void main(String[] args) { 
    ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); 
    ArrayList<Integer> out = new ArrayList<Integer>(); 
    for(int i =1;i<=2;i++) { 
     out.add(i); 
     result.add(out); 
    } 

    System.out.println(result.toString()); 
} 

爲什麼是輸出: [[1,2],[1,2]]當它應該是[[1],[1,2] ]添加更新的ArrayList到數組列表的ArrayList代替以前的值

+2

您並未創建'out'副本。你只需修改同一個對象。 –

+2

這是OOP背後的核心理念。您只需添加兩個_references_同一個列表。 – Mordechai

+0

那麼你如何實現[[1],[1,2]]的輸出呢? – tushR

回答

0

由於您正在修改out的相同引用,所以無處不在。爲了凍結你的列表在特定的點上,你需要創建它的克隆並添加新的列表。

public static void main(String[] args) { 
ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>(); 
ArrayList<Integer> out = new ArrayList<Integer>(); 
for(int i =1;i<=2;i++) { 
    out.add(i); 
    ArrayList<Integer> freeze = new ArrayList<Integer>(out); 
    result.add(freeze); 
} 

System.out.println(result.toString()); 
}