2017-02-20 6 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-byvalue?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のリストがありません。 1つのリストしかありません。

関連する問題