2017-01-11 31 views
6
ArrayList<Integer> a =new ArrayList<Integer>(); 
ArrayList<ArrayList<Integer>> j =new ArrayList<ArrayList<Integer>>(); 

a.add(1); 
a.add(2); 
a.add(3); 

for(int c=0; c<10; c++){ 
    j.add(a); 
} 
j.get(3).add(1); 
System.out.println(j); 

有誰知道爲什麼這段代碼加1,j的每一個元素,而不是隻有第三個因素,我能做些什麼來解決這個問題?添加元素的2D數組列表在Java

回答

3

您在j每個元素使用同樣的ArrayLista實例。 如果您希望它們不同,您必須爲j的每個元素創建ArrayList的新實例。

2
 for(int c=0; c<10; c++) 
     { 
      j.add(new ArrayList<>(a)); 
     } 

在您的代碼中,a是指向ArrayList所在的內存位置的指針。

-1

其實j.get(3)引用ArrayList的一個,因爲每個j.get(C),這就是爲什麼在第j指向的每一個細胞都改變了。下一張圖片展示了它的工作原理。 illustration

+0

不要使用方括號GET –

11

這是將數組列表a添加到數組列表j 10次時會發生的情況。 ![enter image description here

這是當你添加1到數組列表a會發生什麼。

![enter image description here

所以基本上所有的10項指標中的ArrayList j點到一個ArrayList的a。因此,從任何索引j打印價值總是會給你相同的結果。


讓每指數點到不同的數組列表:

enter image description here