2014-12-02 4 views
6

알고 계실 이유를 기입하십시오. 나는 그것을 봤지만 잘 설명 된 답을 찾지 못했습니다.HashMap 16의 초기 용량 (2의 거듭 제곱)과 Hashtable 11의 초기 용량 (소수)이 왜 다른가요?

hashCode이 부정적 일 때 양동이 인덱스를 만들기위한 것이지요?

static int indexFor(int h, int length) { 
    return h & (length-1); 
} 

length의 길이이다 :

+0

왜 2의 힘입니까? http://stackoverflow.com/questions/8352378/why-does-hashmap-require-that-the-initial-capacity-be-a-power-of-two – mishadoff

+0

@mishadoff 좋은 링크, 심지어 anwers 이유에 대한 primes 오래된'Hashtable'에서. –

+0

이 질문을 게시하기 전에 이미이 게시물을 읽었지만 설명을 많이 이해하지 못했습니다. – niiraj874u

답변

7

HashMap 들어, 맵의 엔트리를 저장하는 배열의 인덱스 (h 키의 hashCode로부터 계산) 이러한 방식으로 계산되며 정렬.

length이 2의 거듭 제곱 인 경우에만 작동합니다. length의 거듭 제곱이 아닌 경우이 코드를 덜 효율적으로 return h % length으로 변경해야합니다.

+0

좋은 ... 그 정보를 어디에서 선택 했습니까? –

+0

@ w00te HashMap의 코드를 사용할 수 있습니다. 코드를 살펴 봐야합니다. – Eran

+0

@ w00te 코드를 읽을 수있는 곳은 다음과 같습니다. - http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/6-b14/java/util/HashMap.java – Eran