2017-02-20 76 views
0

ArrayList.get(index)是否僅返回索引處元素的值或指向此元素的指針?我問這個,因爲這是我希望它不執行到ArrayList.get()返回指針不是值?

List<List<Integer>> myList; 
myList = new ArrayList<>(Collections.nCopies(n, new ArrayList<>())); 
      . 
      . 
      . 
List tempList = this.myList.get(x); 
tempList.add(i); 
this.myList.set(i,tempList); 

而是在指數X添加元素到數組中,並在索引存儲新的名單我,它是在兩個點附加的元素所以,而不是一個增加的大小的列表,我得到最後一個元素的n倍

+0

你看過http://stackoverflow.com/questions/40480/is-java-pass-by-reference-or-pass-by-value?rq=1嗎?看看這是否回答你的問題。 –

+0

對象類型的所有Java變量都是引用,其行爲非常像指針。 –

+0

我搜索了但沒有看到這個,謝謝 –

回答

1

你正在看錯了地方。

絕對沒有錯,此代碼:

List tempList = this.myList.get(x); 
tempList.add(i); 
this.myList.set(i,tempList); 

,但它可以被簡寫爲這樣:

List tempList = this.myList.get(x); 
tempList.add(i); 

(和不同之處在於使用的是List,這是一個原始數據類型,這也意味着你沒有啓用警告,但這是另一回事。)

你的問題在這裏:

myList = new ArrayList<>(Collections.nCopies(n, new ArrayList<>())); 

如果你看看Collections.nCopies()實施,你會看到它在內部使用包含只有一個元素的特殊名單,你給它的元素,無論你要求其指數,它向您返回相同的原始元素。

所以,你沒有n列表開始;你只有一個列表。