> Java > java지도 시간 > Java의 문자열용 `hashCode()`가 승수로 31을 사용하는 이유는 무엇입니까?

Java의 문자열용 `hashCode()`가 승수로 31을 사용하는 이유는 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-26 13:28:13
원래의
896명이 탐색했습니다.

Why Does Java's `hashCode()` for Strings Use 31 as a Multiplier?

Java의 문자열용 hashCode() 메서드에서 31이 승수로 사용되는 이유는 무엇입니까?

Java 문서에서는 문자열 객체의 계산을 지정합니다. 해시 코드는 다음과 같습니다.

여기서 s[i]는 문자열의 i번째 문자, n은 문자열의 길이, ^는 지수를 나타냅니다. 이 공식에는 31이라는 고정 승수가 포함됩니다.

31을 승수로 사용하는 이론적 근거

Joshua Bloch의 존경받는 저서 "Effective Java"에 따르면 31을 선택합니다. 승수는 여러 가지에 달려 있기 때문에 요인:

  • 홀수 소수: 31은 곱셈 결과 오버플로가 발생하더라도 정보가 손실되지 않도록 보장합니다(짝수 승수를 사용하는 것과 달리 이동과 동일함). ).
  • 전통: 소수를 승수로 사용하는 것은
  • 성능 최적화: 31에는 성능 향상을 가능하게 하는 고유한 속성이 있습니다. 31 * i는 (i << 5) - i로 효율적으로 대체될 수 있습니다. 이 최적화는 최신 가상 머신에 일반적으로 적용됩니다.

위 내용은 Java의 문자열용 `hashCode()`가 승수로 31을 사용하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿