2012-06-25 189 views
0

所以我創建了一個混洗一組數字的方法,我的想法是我創建了這些數字的總體。 因此,我創建了一個循環,將數字進行混洗,然後將其添加到數組列表中,但是在發現一些調試語句後,我發現它會對數字進行混洗,但僅將最後一個混洗添加到arrayList。任何人都可以幫我弄清楚爲什麼?Java ArrayList填充

solutionList是一個ArrayList進一步向上的代碼,如果有人想知道

for(int k =0;k <100; k++){ 
     Collections.shuffle(solutionList); 
     population2.add(new Object[]{solutionList}) ; 
     System.out.println("In the loop " + solutionList); 

    } 

    for(Object[] row : population2){ 
     System.out.println("Row = " + Arrays.toString(row)); 
    } 

回答

9

population2每個元素是與到相同ArrayList參考陣列。如果你想要不同的列表,你需要爲每個迭代創建一個新列表。

例如,爲了避免每次填充列表與正確的數字,你可以只洗牌solutionList,然後添加一個參照副本

for (int k = 0; k < 100; k++) { 
    Collections.shuffle(solutionList); 
    List<Integer> copy = new ArrayList<Integer>(solutionList); 
    population2.add(new Object[]{ copy }); 
} 
+0

啊輝煌,非常感謝你 – MurphyApps

3
population2.add(new Object[]{solutionList}) ; 

將創建一個對象數組一個單一的元素。該元素恰好是一個列表。

2

您正在創建100個陣列,每個陣列都包含對相同列表的引用。我想你想要的是創造100陣列,每個陣列包含列表元素的副本:

for(int k =0;k <100; k++){ 
    Collections.shuffle(solutionList); 
    population2.add(solutionList.toArray()) ; 
} 

但我會建議避免陣列完全,始終使用集合:

for(int k =0;k <100; k++){ 
    Collections.shuffle(solutionList); 
    population2.add(new ArrayList<Something>(solutionList)); 
}