>Java >java지도 시간 >컬렉션에 대해 hashCode()를 효과적으로 구현하는 방법은 무엇입니까?

컬렉션에 대해 hashCode()를 효과적으로 구현하는 방법은 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-12-18 07:13:15216검색

How to Effectively Implement hashCode() for Collections?

컬렉션에 hashCode() 구현

컬렉션에 대한 hashCode()의 최적 구현은 사용 패턴에 따라 다릅니다. 그러나 Josh Bloch가 자신의 저서 "Effective Java"에서 제안한 널리 수용되는 접근 방식 중 하나는 다음과 같습니다.

알고리즘:

  1. 0이 아닌 값 할당 값을 정수 변수 결과로 변환합니다.
  2. equals() 메서드:

    • 부울 필드의 경우 계산(f ? 0 : 1).
    • 숫자 필드(byte, char, short, int)의 경우 계산(int) f.
    • 긴 필드의 경우 (int)(f ^ (f >>> 32)).
    • float 필드의 경우 Float.floatToIntBits(f)를 계산합니다.
    • double 필드의 경우 Double.doubleToLongBits(f)를 계산하고 결과를 long 값으로 처리합니다.
    • 객체 필드의 경우 객체의 hashCode() 메서드를 사용하거나 f가 0이면 0을 사용합니다. null.
    • 배열 필드의 경우 각 요소의 해시 값을 재귀적으로 계산하여 결합합니다.
  3. 각 해시 값 c를 결과와 결합: 결과 = 37 * 결과 c .
  4. 반품 결과.

장점:

  • 대부분의 사용 사례에 대한 해시 값의 합리적인 분포를 제공합니다.
  • 방법론적 접근 방식으로 일관성이 보장됩니다. 다양한 데이터 유형에 걸쳐 동작합니다.
  • 객체에 영향을 미치는 변경 사항에 민감합니다. 평등합니다.

위 내용은 컬렉션에 대해 hashCode()를 효과적으로 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.