구현에 완전히 의존하지만, 배열이 저렴한 비용으로 요소에 액세스하기 쉽고 링크 된 목록이 해시 충돌을 처리하는 데 필요하므로 기본 데이터 구조가 링크 된 목록의 배열이라는 데 동의합니다. 여기
는 처음에는 초기 용량 배열을 만들고 그것을 java openjdk Hashtable
구현되는지 상세한 예이다
새로운 요소가 추가 될 때 용량 임계 매번를 확인
table = new Entry<?,?>[initialCapacity];
. 한계치에 도달 할 때 다시 해싱 행하고 Entry
형태 연결리스트
int newCapacity = (oldCapacity << 1) + 1;
if (newCapacity - MAX_ARRAY_SIZE > 0) {
if (oldCapacity == MAX_ARRAY_SIZE)
// Keep running with MAX_ARRAY_SIZE buckets
return;
newCapacity = MAX_ARRAY_SIZE;
}
Entry<?,?>[] newMap = new Entry<?,?>[newCapacity];
modCount++;
threshold = (int)Math.min(newCapacity * loadFactor, MAX_ARRAY_SIZE + 1);
table = newMap;
해시 테이블 오래 어레이의 더블 인 새로운 배열을 생성한다. 해시 충돌시 2 개의 다른 값에 대한 인덱스가 같고 링크 된 목록을 통해 필요한 값을 검사하므로 사용됩니다.
private static class Entry<K,V> implements Map.Entry<K,V> {
final int hash;
final K key;
V value;
Entry<K,V> next;
당신은 더 나은 이해를 위해 해시 테이블의 other more simple 구현을 확인 할 수 있습니다.