알고 계실 이유를 기입하십시오. 나는 그것을 봤지만 잘 설명 된 답을 찾지 못했습니다.HashMap 16의 초기 용량 (2의 거듭 제곱)과 Hashtable 11의 초기 용량 (소수)이 왜 다른가요?
hashCode
이 부정적 일 때 양동이 인덱스를 만들기위한 것이지요?
static int indexFor(int h, int length) {
return h & (length-1);
}
length
의 길이이다 :
알고 계실 이유를 기입하십시오. 나는 그것을 봤지만 잘 설명 된 답을 찾지 못했습니다.HashMap 16의 초기 용량 (2의 거듭 제곱)과 Hashtable 11의 초기 용량 (소수)이 왜 다른가요?
hashCode
이 부정적 일 때 양동이 인덱스를 만들기위한 것이지요?
static int indexFor(int h, int length) {
return h & (length-1);
}
length
의 길이이다 :
는 HashMap
들어, 맵의 엔트리를 저장하는 배열의 인덱스 (h
키의 hashCode
로부터 계산) 이러한 방식으로 계산되며 정렬.
length
이 2의 거듭 제곱 인 경우에만 작동합니다. length
의 거듭 제곱이 아닌 경우이 코드를 덜 효율적으로 return h % length
으로 변경해야합니다.
왜 2의 힘입니까? http://stackoverflow.com/questions/8352378/why-does-hashmap-require-that-the-initial-capacity-be-a-power-of-two – mishadoff
@mishadoff 좋은 링크, 심지어 anwers 이유에 대한 primes 오래된'Hashtable'에서. –
이 질문을 게시하기 전에 이미이 게시물을 읽었지만 설명을 많이 이해하지 못했습니다. – niiraj874u