2016-09-18 8 views
-1

HashMapHashSetに追加しようとすると間違った値が表示されます。HashMapのHashSetが間違った値を表示しています

CODE

HashSet<HashMap> arList = new HashSet<HashMap>(); 
HashMap<String, String> hm = new HashMap<String, String>(); 
hm.put("name", "Amit"); 
hm.put("device_id", "192.168.1.100"); 
hm.put("ip", "192.168.1.100"); 
System.out.println("hm:"+hm); 
arList.add(hm); 
//add again 
arList.add(hm); 

hm.put("name", "Mani"); 
hm.put("device_id", "192.168.1.102"); 
hm.put("ip", "192.168.1.102"); 
arList.add(hm); 

System.out.println("hm:"+hm); 
System.out.println("arList: " + arList); 

OUTPUT

hm:{name=Amit, device_id=192.168.1.100, ip=192.168.1.100} 
hm:{name=Mani, device_id=192.168.1.102, ip=192.168.1.102} 
arList: [{name=Mani, device_id=192.168.1.102, ip=192.168.1.102}, {name=Mani, device_id=192.168.1.102, ip=192.168.1.102}] 

予想される出力

hm:{name=Amit, device_id=192.168.1.100, ip=192.168.1.100} 
hm:{name=Mani, device_id=192.168.1.102, ip=192.168.1.102} 
arList: [{name=Amit, device_id=192.168.1.100, ip=192.168.1.100}, {name=Mani, device_id=192.168.1.102, ip=192.168.1.102}] 
+1

あなたはコレクションへの参照を追加すると、それだけで参照が追加されます。参照されるオブジェクトのコピーは追加されません。 –

答えて

0

あなた変数は1つの(HashMap)インスタンスを指し、続いてHashSetに2回(またはさらに// add againブロックで3回)追加されます。 HashMapインスタンスには最後に置かれた値が含まれ、そのセットには同じマップへの2つ(または3つ)の参照が含まれます。

それが正常に動作させるために、2つの別々のHashMapのインスタンスを作成します。

HashSet<HashMap> hs = new HashSet<HashMap>(); 
HashMap<String, String> hm1 = new HashMap<String, String>(); 
hm1.put("name", "Amit"); 
hm1.put("device_id", "192.168.1.100"); 
hm1.put("ip", "192.168.1.100"); 

hs.add(hm1); 

HashMap<String, String> hm2 = new HashMap<String, String>(); 
hm2.put("name", "Mani"); 
hm2.put("device_id", "192.168.1.102"); 
hm2.put("ip", "192.168.1.102"); 

hs.add(hm2); 
関連する問題