HashMap을 생성하고 그 안에 put을 해도 HashMap자체의 해쉬코드(hashCode)값은 안변할 줄 알았것만.....
결론은 put을 할 때마다 hadhCode값이 변하게 됩니다.
[ 백문이불여일코딩 ]
[ 결과 hashcode 값 ]
get메서드사용할때는 당연히 안바뀌고 put으로 데이터를 넣을 때 마다 해쉬코드가 변하는 것을 확인!!!!
값은 key값에 데이터를 덮어씌울때도 hashcode가 변한다! 이유는??
[ 이유는??? ]
HashMap의 put메서드가 내부적으로 entry를 새로 만들기 때문!!!!
map에서의 hashcode의 값은 entry의 해시코드의 합으로 정의되는데 내부에서
put메서드가 호출될때마다 새로운 entry를 생성하기 때문에 값이 달라짐
public int hashCode()
Object.hashCode()
.This implementation iterates over entrySet(), calling hashCode()
on each element (entry) in the set, and adding up the results.
- Specified by:
hashCode
in interfaceMap<K,V>
- Overrides:
hashCode
in classObject
- Returns:
- the hash code value for this map
- See Also:
Map.Entry.hashCode()
,Object.equals(Object)
,Set.equals(Object)
참조 : https://docs.oracle.com/javase/7/docs/api/java/util/AbstractMap.html#hashCode()
[ HashMap put메서드를 따라가보자! ]
1. put
2. putVal
3. putTreeVal
4. newTreeNode
5. new TreeNode
6. TreeNode의 super
Wow....
상식적으로 생각했을 때 Map이 한 번 생성되면 안에 내용이 변경되더라도 해시코드(hashcode)값은 변하지 않을 줄 알았는데....
변하는 것을 보고 한 번 끝까지 따라가 보았다.
뭔가 속이 후련한???
앞으로도 궁금한점이 생긴다면 대충 알고 넘어가는 것보다 한 번 끝까지 따라가 제대로 된 이유를 알아보는것을 습관화하도록 하자!
'Programming > Java,Spring' 카테고리의 다른 글
[ Springboot ] 스프링부트 기본 컨테이너 톰캣 제외시키기 (0) | 2019.07.25 |
---|---|
[ Springboot ] 스프링부트에서 어플리케이션 실행되자마자 종료되는 현상 (0) | 2019.03.29 |
[ Java ] 자바 HashMap, ArrayList contains메소드 성능 비교 (0) | 2018.11.28 |
[ Spring ] 스프링에서 Zookeeper connect시 ClosedChannelException (0) | 2018.11.20 |
[ Java ] 자바 map byte사이즈 얻고 싶은 경우 (0) | 2018.10.29 |