2013-10-25 49 views
1

我創建了一個由80名Arraylist組成的ArrayList。每個ArrayList裏面都有值1-9。ArrayList的Arraylist刪除函數影響所有Arraylists

但是,當我從其中一個Arraylists中刪除一個值時,其中的所有值都被刪除。

ArrayList<List> available = new ArrayList<List>(); 
ArrayList<Integer> possibleValues = new ArrayList<Integer>(); 



    for(int j = 1; j<=9; j++){ 
     possibleValues.add(j); 
    } 

    for (int i = 0; i<=80; i++){ 
     available.add(possibleValues); 
    } 

    int b = (int) available.get(0).get(2); 
    available.get(0).remove(0); 
    String s = available.get(80).toString(); 
    System.out.println(" " + s); 

} 

任何幫助表示讚賞。

回答

6

這裏的問題在於,您添加了相同的ArrayListpossibleValuesavailable 81次。因此,available列表包含對同一個possibleValues列表的81個引用。

對列表所做的任何更改都可以通過這81個引用中的任何一個來看到。

如果您不希望更改所有引用可見的,只有一個,那麼你需要做的清單81份補充:

for (int i = 0; i<=80; i++){ 
    available.add(new ArrayList<Integer>(possibleValues)); 
} 
1

這是因爲您將相同的ArrayList添加到外部ArrayList的每個索引。對此ArrayList的任何更改將自動導致其他ArrayList的更改。

嵌套您的循環始終創建一個新的ArrayList或構建一個新的ArrayList從現有的。

1

因爲你要添加的值相同的ArrayList。您需要爲0到80次迭代創建新的Arraylist。

for(int j = 1; j<=9; j++){ 
     possibleValues.add(j);// one ArrayList with values. 
} 


for (int i = 0; i<=80; i++){ 
     available.add(possibleValues); //Here adding same Arraylist 80 times. 
} 

試試這個

ArrayList<List> available = new ArrayList<List>(); 
    ArrayList<Integer> possibleValues = new ArrayList<Integer>(); 

    for (int i = 0; i<=80; i++){ 
    possibleValues = new ArrayList<Integer>(); 
    for(int j = 1; j<=9; j++){   
     possibleValues.add(j); 
    } 
    available.add(possibleValues); 
    } 
+1

請解釋爲什麼此代碼正在工作,而不是簡單地提供,+1雖然:) –

0

您添加相同ArrayList的81倍。 ArrayList是一個引用類型,所以對它的任何更改都會影響所有項目。它應該是:

available.add(new ArrayList(possibleValues));