이클립스 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
,키 : 즐겨 찾기 게임, 값 : 피파 해시 코드 : 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 29,666 크기 :
5 키 : 즐겨 찾기 음식, 값 : 피자 해시 코드 : 983035627 크기 : 5
난 그냥 Fav1 출력 변화에 즐겨 찾기에서지도의 첫 번째 키를 변경했습니다. 의심의 여지가 있습니까? 미리 감사드립니다 :)
왜냐하면 fav 랩과 fav1 랩이 다른 개체이기 때문입니다. 그 이유는 방금 키의 이름을 변경 했는데도 여전히 새로운 객체를 만드는 것입니다. –
코드의 현재 항목에 대한 키가 변경되지 않습니다. 기본적으로지도에 2 개의 항목을 추가하는 것입니다. – imprezzeb
@ Mr.Aw 나는 Fav1 랩의 새로운 대상을 만들 것이라는 데 동의한다. 그러나 Fav Game과 학생이라는 다른 두 항목에는 어떤 일이 발생합니다. 목록의 크기는 5이지만 데이터 표시 횟수는 3입니다. 내 관심사를 이해 하셨 으면합니다. –