HashMap의 put 중에 콜리 전이있을 때 맵의 크기가 변경되었거나 특정 버킷의 목록에 추가 된 항목입니까?HashMap 충돌로 인해 크기가 조정됩니까?
답변
'충돌'이라고 말하면 동일한 해시 코드를 의미합니까? 해시 코드는 HashMap에서 어떤 버킷이 사용될 것인지를 결정하는 데 사용되며, 버킷은 동일한 해시 코드를 가진 모든 항목의 링크 된 목록으로 구성됩니다. 그런 다음 엔트리는 equals (.equals()를 사용하여) 반환되거나 부팅 (get/put)되기 전에 비교됩니다.
이것은 HashMap (구체적으로 사용자가 요청한 것이므로)과 다른 구현 인 YMMV입니다.
어느 쪽이든 - HashMap의 채우기 비율에 따라 다릅니다.
그러나 일반적으로 해당 버킷의 목록에 추가됩니다. HashMap 클래스는 크기가 비교적 비싸기 때문에 크기가 작게 설계되었습니다.
하중 계수에 도달하면 재기록이 수행됩니다.
HashMap의 put 중에 충돌이 발생하면 해당 항목이 해당 "버킷"의 목록에 추가됩니다. 로드 요소에 도달하면 해시 맵의 크기가 조정됩니다.
는java.util.HashMap
의 문서는지도의 크기를 조정할 정확히 설명 : 초기 용량 및 부하 계수 :
의 HashMap의 인스턴스에는, 그 성능에 영향을주는 두 개의 매개 변수가 있습니다.
용량은 해시 테이블의 버킷 수이며 초기 용량은 단순히 해시 테이블을 만들 때의 용량입니다.
부하 계수은 용량이 자동으로 증가하기 전에 해시 테이블이 얼마나 채워지는지 측정합니다. 해시 테이블은 대략 갖도록 해시 테이블의 엔트리 수는 부하율 및 전류 용량의 곱을 초과
는해시 테이블 (즉, 내부 데이터 구조가 재 구축된다)을 재탕되고 두 배의 양동이.
기본 초기 용량은 16이며 기본 부하 계수는 0.75입니다. 지도의 생성자에서 다른 값을 제공 할 수 있습니다.
추가 참고 사항 : 구현 방법에 대해 궁금한 점이 있다면 소스 코드를 다운로드하여 살펴 보는 것이 가장 좋은 이유는 무엇입니까? '추가 리소스'아래의 http://java.sun.com/javase/downloads/index.jsp에서 사용할 수 있습니다. – Kylar