HashMap의 확장 크기는 2의 거듭 제곱 왜

이상적으로, 해시 맵 액세스, 목록에 각 버킷에 저장 한 노드 만, 포인트는 null이 직접 해시 코드를 기반으로 O (1), 찾을 수 있습니다,이 더 재미가 긴 목록을 볼 수 없습니다 상황.

우리가 기록되지 그것은 균일 한 분포 점은, 우리가 그것을 디자인 할 경우, 우리는 확실히 계수 ----- 해시 코드 % 길이지만, 디자이너의 HashMap의 길이를 직접 희망 그래서, 그것은 바이너리로 작성 조작으로 다음과 같습니다 :

 정적  최종  INT의 해시 (개체 키) {
      INT 시간;
     반환 (키 == null이 )? 0 (H = key.hashCode ()) ^ (H >>> 16 ); 
 }

특정 액세스 규칙 배열 인 탭 [(. 1-N-) 해시] 탭 노드 어레이이고, n은 어레이의 길이, 해시 키의 해시 값이다.

및 이런 일이 해시 - 왜 (1 N)로 설계? 이진 연산 훨씬 빠르게 모듈러스보다,이 이러한 방식을 사용하기 때문에, 요구 (2) 및 해시 ≈ 해시 % N - 경우는 n 것은 (1 N) (2)의 전원 인 전원을 켭니다.

우리는이 이유는, 상위 16 비트만큼 인 좌측 16 32 해시 코드 값, 높은 충전 0, 이동, 그 해시를 찾는 과정을 볼 수 있을까? 상기 계산 된 해시의 해시 값은 메인 높은 차이와 이어질 이후 (N - 1)을 사용 H >>> 16 개 유사한 상황 해시 충돌을 피할 정도로 해시, 고용량 이상 무시할 수있다.

추천

출처www.cnblogs.com/gaopengpy/p/11923346.html