의 HashMap 내가 해시 테이블의 초기 크기를 가지며, 아직 넣어 다양한 호출 (이후 증가 얻을 수 이해되는 값HashMap의 구현 문제
을 길게 배열)는 해시 테이블을 포함하는 (의존 로드 - 팩터에)
아무튼 나는 해시 테이블의 크기를 변경 한 후에 값을 찾을 수 있을지 궁금해하기 때문에 특정 키의 코드를 가지고 있기 때문에 계산할 수 있습니다. 표
예 : 키 * 프라임 % 크기
어떻게 작동합니까?
의 HashMap 내가 해시 테이블의 초기 크기를 가지며, 아직 넣어 다양한 호출 (이후 증가 얻을 수 이해되는 값HashMap의 구현 문제
을 길게 배열)는 해시 테이블을 포함하는 (의존 로드 - 팩터에)
아무튼 나는 해시 테이블의 크기를 변경 한 후에 값을 찾을 수 있을지 궁금해하기 때문에 특정 키의 코드를 가지고 있기 때문에 계산할 수 있습니다. 표
예 : 키 * 프라임 % 크기
어떻게 작동합니까?
Visage는 일반적으로 키에서 계산 된 해시 값을지도의 실제 크기를 모듈로 확산하여 버킷에 매핑하고지도의 크기가 조정되면 모든 요소가 다시 확산됩니다. 버킷의 새로운 범위.
그러나 Java 1.4부터는 커튼 뒤에서 일어날 일이 몇 가지 있습니다. 우선 전통적인 해시 맵에서 크기는 이상적인 소수입니다. 이는 버킷 범위 전체에 요소를보다 균등하게 분산시키는 데 도움이되기 때문입니다. 그러나 Java 1.4 HashMap에서 크기는 항상 2의 제곱입니다. 이렇게하면 표준 배포가 매우 나 빠지게됩니다. 그러나이 구현에서 해시 값은 내부적으로 매우 빠른 알고리즘을 사용하여 배포를 원활하게합니다.
키는 일반적으로 값이 입력 된 저장소를 찾는 데 사용되기 때문에 사용됩니다. 모든 개체가 새 크기에 따라 새 저장소로 다시 할당되기 때문에 재 할당이 영향을 미치지 않습니다. 당신이 addEntry(..)
방법의 코드를 보면
, 당신은 참조하십시오
크기 조정에if (size++ >= threshold)
resize(2 * table.length);
에서, transfer(..)
메서드가 호출되고, 어떤 : newTable에 현재 테이블에서
전송 모든 항목 .
아, 크기를 늘린 후에 모든 값을 검토하고 다시 할당한다고 말했습니까? –
아니요, HashMap 구현이 있습니다. – PaulJWilliams
그것이 내가 의미했던 것이 었습니다. 좋은 감사합니다! –