나는 다음과 같은HashMap에서 초기 용량이 2의 배수가되도록 요구하는 이유는 무엇입니까?
//The default initial capacity - MUST be a power of two.
static final int DEFAULT_INITIAL_CAPACITY = 16;
내 질문을봤을 때 내가 자바의 HashMap의 소스 코드를 통해가는이 요구 사항은 처음부터 존재하는 않는 이유는?
이int capacity = 1;
while (capacity < initialCapacity)
capacity <<= 1;
왜 항상이 용량이 2의 제곱이 될 않습니다 또한 사용자 정의 용량는 HashMap을 만들 수있는 생성자는 2의 거듭 제곱으로 변환 볼?
또한 자동 다시 해싱이 수행 될 때 정확히 어떻게됩니까? 해시 함수가 변경 되었습니까?
정확히 내가 무엇을 찾고 있었습니까, 고맙습니다. 한 번 더 의심 스럽지만 모든 데이터를 유지하는 경우에도 왜 Entry 테이블이 일시적입니까? – Sushant
@Sushant : 테이블의 데이터는 writeObject 내에서 * 명시 적으로 * 직렬화되므로 모든 빈 항목이 기록되지 않습니다. 필드를 일시적으로 만들면 일반적인 serialization 코드가'defaultWriteObject'를 호출하여 쓰는 것을 막습니다. –
@JonSkeet h & (길이 -1)는 어떻게 네거티브를 처리합니까? 길이 = 16 및 h = -7을 말할 수 있습니다 – Geek