현재 버전

네 아래 내용도 보시면 좋을듯 합니다. 오래전 보았던 내용이라 다시 정리해보면서 공유드립니다. :-)


equals and hashCode contract 의 개념이 있습니다. 

  • 2개의 object 에 대해, equals() 가 true 이면, hashCode() 도 서로 같아야 합니다. 
  • 2개의 object 에 대해, equals() 가 false 이면, hashCode() 가 같을 수도 다를수도 있다.


간단히 말하면 a.equals(b) 이면 a.hashCode() == b.hashCode() 입니다. 

위 contract 을 만족시키기 위해 equals() 를 override 했으면 반드시 hashCode() 도 override 해서 구현해야 합니다.

그렇지 않으면 contract violation 입니다.


뭐 살짝 contract 안지킬수도 있지 빌드도 잘되고 아무 이상없는데?

라고 할 수도 있지만, hash 기반 collection 을 사용할 경우는 다시 생각해 봐야 합니다. 내부 구현에서 equals() 와 hashCode() 가 사용되기 때문이죠.


아래는 Effective Java 의 내용 일부인데, equals() 를 override 했으면, hashCode() 도 override 해야 하는 이유를 설명합니다.


You must override hashCode in every class that overrides equals. If you fail to do so, your class will violate the general contract for hashCode, which will prevent it from functioning properly in collections such as HashMap and HashSet.


아래 이미지는 HashMap 의 bucket 과 hashCode(), equals() 의 관계를 나타냅니다.

java hashmap, how hashmap works in java

HashMap, HashSet 같은 hash 기반 collection 에서는 데이터 저장시,

  • hashCode() 를 키값으로 bucket 에 저장하고 같은 값이 있을경우(hash collision), 내부적으로 LinkedList 에 넣습니다.


위의 내용대로라면 hashCode() 를 제대로 구현하지 않으면 hash collision 자주 일어나게되고, 데이터 추가/삭제시 퍼포먼스가 느려지겠죠. 왜냐하면 한번에 키값으로 bucket 에서 값을 가져오지 못하고 bucket → LinkedList 를 거쳐서 가져와야 하니까요.


알고 있으면 좋은 내용이라서 적어봤습니다. 즐코딩요~



수정 이력

2021-05-16 13:05:34 에 아래 내용에서 변경 됨 #4

네 아래 내용도 보시면 좋을듯 합니다. 오래전 보았던 내용이라 다시 정리해보면서 공유드립니다. :-)


equals and hashCode contract 의 개념이 있습니다. 

  • 2개의 object 에 대해, equals() 가 true 이면, hashCode() 도 서로 같아야 합니다. 
  • 2개의 object 에 대해, equals() 가 false 이면, hashCode() 가 같을 수도 다를수도 있다.


간단히 말하면 a.equals(b) 이면 a.hashCode() == b.hashCode() 입니다.

위 contract 을 만족시키기 위해 equals() 를 override 했으면 반드시 hashCode() 도 override 해서 구현해야 합니다.

그렇지 않으면 contract violation 입니다.


뭐 살짝 contract 안지킬수도 있지 빌드도 잘되고 아무 이상없는데?

라고 할 수도 있지만, hash 기반 collection 을 사용할 경우는 다시 생각해 봐야 합니다. 내부 구현에서 equals() 와 hashCode() 가 사용되기 때문이죠.


아래는 Effective Java 의 내용 일부입니다. 


You must override hashCode in every class that overrides equals. If you fail to do so, your class will violate the general contract for hashCode, which will prevent it from functioning properly in collections such as HashMap and HashSet.


아래 이미지는 HashMap 의 bucket 과 hashCode(), equals() 의 관계를 나타냅니다.

java hashmap, how hashmap works in java

HashMap, HashSet 같은 hash 기반 collection 에서는 데이터 저장시,

  • hashCode() 를 키값으로 bucket 에 저장하고 같은 값이 있을경우(hash collision), 내부적으로 LinkedList 에 넣습니다.


위의 내용대로라면 hashCode() 를 제대로 구현하지 않으면 hash collision 자주 일어나게되고, 데이터 추가/삭제시 퍼포먼스가 느려지겠죠.


알고 있으면 좋은 내용이라서 적어봤습니다. 즐코딩요~


2021-05-16 01:11:06 에 아래 내용에서 변경 됨 #3

네 아래 내용도 보시면 좋을듯 합니다. 오래전 보았던 내용이라 다시 정리해보면서 공유드립니다. :-)


equals and hashCode contract 의 개념이 있습니다. 

  • 2개의 object 에 대해, equals() 가 true 이면, hashCode() 도 서로 같아야 합니다. 
  • 2개의 object 에 대해, equals() 가 false 이면, hashCode() 가 같을 수도 다를수도 있다.


간단히 말하면 a.equals(b) 이면 a.hashCode() == b.hashCode() 입니다.

위 contract 을 만족시키기 위해 equals() 를 override 했으면 반드시 hashCode() 도 override 해서 구현해야 합니다.

그렇지 않으면 contract violation 입니다.


뭐 살짝 contract 안지킬수도 있지 빌드도 잘되고 아무 이상없는데?

라고 할 수도 있지만, hash 기반 collection 을 사용할 경우는 다시 생각해 봐야 합니다. 내부 구현에서 equals() 와 hashCode() 가 사용되기 때문이죠.


아래는 Effective Java 의 내용 일부입니다. 


You must override hashCode in every class that overrides equals. If you fail to do so, your class will violate the general contract for hashCode, which will prevent it from functioning properly in collections such as HashMap and HashSet.


아래는 HashMap 의 bucket 과 hashCode(), equals() 의 관계를 나타냅니다.

java hashmap, how hashmap works in java

HashMap, HashSet 같은 hash 기반 collection 에서는 데이터 저장시,

  • hashCode() 를 키값으로 bucket 에 저장하고 같은 값이 있을경우(hash collision), 내부적으로 LinkedList 에 넣습니다.


위의 내용대로라면 hashCode() 를 제대로 구현하지 않으면 hash collision 자주 일어나게되고, 데이터 추가/삭제시 퍼포먼스가 느려지겠죠.


알고 있으면 좋은 내용이라서 적어봤습니다. 즐코딩요~


2021-05-16 01:09:24 에 아래 내용에서 변경 됨 #2

네 아래 내용도 보시면 좋을듯 합니다. 오래전 보았던 내용이라 다시 정리해보면서 공유드립니다. :-)


equals and hashCode contract 의 개념이 있습니다. 

  • 2개의 object 에 대해, equals() 가 true 이면, hashCode() 도 서로 같아야 합니다. 
  • 2개의 object 에 대해, equals() 가 false 이면, hashCode() 가 같을 수도 다를수도 있다.


간단히 말하면 a.equals(b) 이면 a.hashCode() == b.hashCode() 입니다.

위 contract 을 만족시키기 위해 equals() 를 override 했으면 반드시 hashCode() 도 override 해서 구현해야 합니다.

그렇지 않으면 contract violation 입니다.


뭐 살짝 contract 안지킬수도 있지 빌드도 잘되고 아무 이상없는데?

라고 할 수도 있지만, hash 기반 collection 을 사용할 경우는 다시 생각해 봐야 합니다. 내부 구현에서 equals 와 hashCode 가 사용되기 때문이죠.


아래는 Effective Java 의 내용 일부입니다. 


You must override hashCode in every class that overrides equals. If you fail to do so, your class will violate the general contract for hashCode, which will prevent it from functioning properly in collections such as HashMap and HashSet.


아래는 HashMap 의 bucket 과 hashCode(), equals() 의 관계를 나타냅니다.

java hashmap, how hashmap works in java

HashMap, HashSet 같은 hash 기반 collection 에서는 데이터 저장시,

  • hashCode() 를 키값으로 bucket 에 저장하고 같은 값이 있을경우(hash collision), 내부적으로 LinkedList 에 넣습니다.


위의 내용대로라면 hashCode() 를 제대로 구현하지 않으면 hash collision 자주 일어나게되고, 데이터 추가/삭제시 퍼포먼스가 느려지겠죠.


알고 있으면 좋은 내용이라서 적어봤습니다. 즐코딩요~


2021-05-16 01:08:59 에 아래 내용에서 변경 됨 #1

네 아래 내용도 보시면 좋을듯 합니다. 오래전 보았던 내용이라 다시 정리해보면서 공유드립니다. :-)


equals and hashCode contract 의 개념이 있습니다. 

  • 2개의 object 에 대해, equals() 가 true 이면, hashCode() 도 서로 같아야 합니다. 
  • 2개의 object 에 대해, equals() 가 false 이면, hashCode() 가 같을 수도 다를수도 있다.


간단히 말하면 a.equals(b) 이면 a.hashCode() == b.hashCode() 입니다.

위 contract 을 만족시키기 위해 equals 를 override 했으면 반드시 hashCode 도 override 해서 구현해야 합니다.

그렇지 않으면 contract violation 입니다.


뭐 살짝 contract 안지킬수도 있지 빌드도 잘되고 아무 이상없는데?

라고 할 수도 있지만, hash 기반 collection 을 사용할 경우는 다시 생각해 봐야 합니다. 내부 구현에서 equals 와 hashCode 가 사용되기 때문이죠.


아래는 Effective Java 의 내용 일부입니다. 


You must override hashCode in every class that overrides equals. If you fail to do so, your class will violate the general contract for hashCode, which will prevent it from functioning properly in collections such as HashMap and HashSet.


아래는 HashMap 의 bucket 과 hashCode(), equals() 의 관계를 나타냅니다.

java hashmap, how hashmap works in java

HashMap, HashSet 같은 hash 기반 collection 에서는 데이터 저장시,

  • hashCode() 를 키값으로 bucket 에 저장하고 같은 값이 있을경우(hash collision), 내부적으로 LinkedList 에 넣습니다.


위의 내용대로라면 hashCode() 를 제대로 구현하지 않으면 hash collision 자주 일어나게되고, 데이터 추가/삭제시 퍼포먼스가 느려지겠죠.


알고 있으면 좋은 내용이라서 적어봤습니다. 즐코딩요~