Eclipse IDE上で並行HashMapを使用していましたが、同時に並行HashMapのキーを変更している間に、出力も変更されていました。
ケースI:
キーの値を変更すると、並行HashMapで出力が変更されるのはなぜですか?
public static void main(String[] args) {
ConcurrentHashMap<String, String> concurrentHashMap= new ConcurrentHashMap<String, String>();
concurrentHashMap.put("Fav Rap", "Eminem");
concurrentHashMap.put("Fav Food", "Pizza");
concurrentHashMap.put("Pop", "Jackson");
for(Map.Entry<String, String> entry : concurrentHashMap.entrySet()){
concurrentHashMap.put("Fav Game", "Fifa");
concurrentHashMap.put("student", "smith");
System.out.println("Key : "+entry.getKey()+", Value : "+entry.getValue()+" hashcode: "+entry.hashCode()+" size: "+concurrentHashMap.size());
}
}
出力は次のようになります。
キー:ポップ、値:ジャクソンのハッシュコード:-172386558サイズ:5
キー:たツイートラップ、価値:エミネムのハッシュコード:1491542025サイズ:5
キー:生徒、値:smithハッシュコード:-1988544968サイズ:5
キー:たツイートゲーム、価値:FIFAのハッシュコード:1043213001サイズ:5
キー:たツイート食品、価値:ピザのハッシュコード:983035627サイズ:5
ケースII:
public static void main(String[] args) {
ConcurrentHashMap<String, String> concurrentHashMap= new ConcurrentHashMap<String, String>();
concurrentHashMap.put("Fav1 Rap", "Eminem");
concurrentHashMap.put("Fav Food", "Pizza");
concurrentHashMap.put("Pop", "Jackson");
for(Map.Entry<String, String> entry : concurrentHashMap.entrySet()){
concurrentHashMap.put("Fav Game", "Fifa");
concurrentHashMap.put("student", "smith");
System.out.println("Key : "+entry.getKey()+", Value : "+entry.getValue()+" hashcode: "+entry.hashCode()+" size: "+concurrentHashMap.size());
}
}
出力次のとおりです。
キー:ポップ、値:ジャクソンハッシュコード:-172386558サイズ:5
キー:Fav1ラップ、価値:エミネムハッシュコード:11578 29666サイズ:
5キー:たツイート食品、価値:ピザのハッシュコード:983035627サイズ:5
私はちょうどFav1と出力が変化するたツイートからマップの最初のキーを変更しました。 あなたは疑いを明確にしてください。事前に感謝:)
favラップとfav1ラップは異なるオブジェクトであるためです。そのため、キーの名前を変更したにもかかわらず、新しいオブジェクトが作成されます。 –
コード内の現在のエントリのキーに変更がありません。あなたは基本的にあなたのマップに基本的に2つのエントリを追加しています。 – imprezzeb
@ Mr.Aw私はそれがFav1ラップの新しいオブジェクトを作成することに同意します。しかし、Favゲームと学生の他の2つのエントリはどうなりますか?リストのサイズは5と思われますが、表示されるデータの数は3です。私の懸念を理解していただきたいと思います。 –