컬렉션에 hashCode() 구현
컬렉션에 대한 hashCode()의 최적 구현은 사용 패턴에 따라 다릅니다. 그러나 Josh Bloch가 자신의 저서 "Effective Java"에서 제안한 널리 수용되는 접근 방식 중 하나는 다음과 같습니다.
알고리즘:
- 0이 아닌 값 할당 값을 정수 변수 결과로 변환합니다.
-
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.
- 배열 필드의 경우 각 요소의 해시 값을 재귀적으로 계산하여 결합합니다.
- 각 해시 값 c를 결과와 결합: 결과 = 37 * 결과 c .
- 반품 결과.
장점:
- 대부분의 사용 사례에 대한 해시 값의 합리적인 분포를 제공합니다.
- 방법론적 접근 방식으로 일관성이 보장됩니다. 다양한 데이터 유형에 걸쳐 동작합니다.
- 객체에 영향을 미치는 변경 사항에 민감합니다. 평등합니다.
위 내용은 컬렉션에 대해 hashCode()를 효과적으로 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!