2016-03-26 8 views
-4

地図私は、この検索方法のアイデアを持っていない:のJavaのArrayListと

Random generator = new Random(); 
Map<Integer, ArrayList> mapOfprevOp = new HashMap<>(); 
ArrayList<Integer> listPrev = new ArrayList<>(); 


listPrev = mapOfprevOp.get(operacja); 
System.out.println(listPrev); // it will show [] 

int rnd = generator.nextInt(op_cnt) + 1; 
listPrev.add(rnd); 
System.out.println(mapOfprevOp.get(operacja)); // it will show value of listPrev 

なぜ第二のSystem.out listPrevのスクリーン値に私を印刷しますか?

[]が印刷されるべきではありませんか?

listPrev = mapOfprevOp.get(operacja); 

この行は、私が期待できるものとは違っていますか?

+0

マップには、同じオブジェクトであるため、リストに追加した値が表示されます。 –

+0

Mapの値をArrayListに割り当てる方法は? – marylyn17

+0

どうすれば分けることができますか? – marylyn17

答えて

0

これは、最初のSystem.out.println呼び出しでは、リストが空であることを示唆しています。

ここをクリックしてくださいhttps://docs.oracle.com/javase/7/docs/api/java/util/AbstractCollection.html#toString%28%29。リストのtoStringメソッドは、角括弧で囲まれた要素を返します。したがって、[]は空のリストです。

2回目の呼び出しで、要素が追加されました。この要素が表示されます。 Javaでは、オブジェクトに参照を渡して、listPrevがマップに含まれているものと同じリストを参照していることを念頭におく必要があります。

あなただけの値を取得したい場合は、私はこれが影響し、その後の操作なしmapOfprevOp.get(operacja)からlistPrevへのすべての要素を追加します

listPrev.addAll(mapOfprevOp.get(operacja)); 

であることをあなたが

listPrev = mapOfprevOp.get(operacja); 

を変更することをお勧めあなたが望むものと思われる地図。

また、Map<Integer, ArrayList> mapOfprevOp = new HashMap<>();一般に、地図のようなデリカーションでは、インタフェースタイプを使用する方が良いです。だから、ArrayListListに切り替えることを検討します。

あなたはまだこのようなArrayListを、することができ、その自己を使用してオブジェクト:

地図mapOfprevOp =新しいHashMapの<>(); リストlistPrev = new ArrayList <>();

これをLinkedListに変更する場合は、3つではなく1つの場所でのみ変更することになります。Arrays.asListリストを除いて、すべてのリストのサイズを変更できます。

+0

私はもっと多くの要素を置くので、ArrayListでなければなりません。ここにコードのスニペットがあります。 – marylyn17

+0

答えを編集して詳細を編集しました。あなたはその点を少し誤解していると思います。 – saml

+0

mapOfprevOp.get(operacja)の値を取得するだけで、listPrevが割り当てられません。 – marylyn17