아이템 11. equals를 재정의하려거든 hashCode도 재정의하라

hashCode도 재정의하지 않는다면?

hashCode 일반 규약 3가지

  1. equals가 재정의 되지 않았다면 애플리케이션이 실행되는 동안 그 객체의 hashCode메서드는 일관되게 항상 같은 값을반환해야함 단, 애플리케이션을 다시 실행한다면 이 값이 달라져도 상관없음
  2. equals(Object)가 두 객체를 같다고 판단했다면 두 객체의 hashCode는 똑같은 값을 반환해야함
  3. equals(Object)가 두 객체를 다르다고 판단했더라고 두 객체의 hashCode가 서로 다른 값을 반환할 필요는 없음

hashCode 재정의를 잘못했을 때 크게 문제가 되는 조항은 두 번째

hashCode 구현한다면 equals 비교에 사용되지 않은 필드는 ‘반드시’제외해야함(hashCode 두번째 규약)

해시 충돌이 적은 방법을 꼭 써야한다면 구아바(com.google.common.hash.Hashing)참고

성능 높인다고 해시코드 계산에 핵심 필드를 생략해서는 안됨