java HashMap 용량 확장 상세 정보 및 실례 코드
선언:
HashMap의 크기가 (용량 * 마운트 인자) 보다 클 때 용량 확장 작업을 촉발합니다. 이것은 대가가 적지 않은 작업입니다.
왜 용량을 늘려야 합니까?HashMap의 기본 용량은 16입니다. 요소가 HashMap에 계속 추가됨에 따라hash 충돌이 발생할 확률이 더욱 높고 통마다 대응하는 체인 시계가 더 길어집니다.
이렇게 하면 조회의 성능에 영향을 줄 수 있다. 왜냐하면 매번 체인 테이블을 훑어보고 대상이 같은지 원소를 찾을 때까지 비교해야 하기 때문이다.
검색 성능을 향상시키기 위해hash 충돌을 줄이고 원소의 키를 최대한 고르게 분포할 수 있습니다.
확장 기본점
로드 인자 기본값은 0.75입니다.
static final float DEFAULT_LOAD_FACTOR = 0.75f;
용량의 기본값은 16입니다.
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // 16
HashMap은 생성할 때 용량과 불러오는 인자를 지정할 수 있는 구조 파라미터를 제공합니다.
public HashMap(int initialCapacity, float loadFactor)
기본적으로 HashMap의 크기가 16*0.75=12보다 크면동시에 모든 Entry(또는 통) 안에 최소한 하나의 원소가 있을 때 용량을 확대한다.
if ((size >= threshold) && (null != table[bucketIndex])) {
resize(2 * table.length);
hash = (null != key) ? hash(key) : 0;
bucketIndex = indexFor(hash, table.length);
}
용량을 늘릴 때 용기 용량이 배로 늘어난다
resize(2 * table.length);
확장할 때 원소의 수조를 다시 계산해야 한다1. 새 Entry 배열 재할당
2. 원래 원소의 새 수조에 있는 하표를 다시 계산한다(자원 소모량 비교)
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.