ProgramingTip

Java는 HashMap 또는 HashTable에서 항목을 어떻게 주문합니까?

bestdevel 2020. 12. 3. 08:15
반응형

Java는 HashMap 또는 HashTable에서 항목을 어떻게 주문합니까?


Java가 Map( HashMap또는 Hashtable) 항목 이 추가 될 때 어떻게 주문하는지 궁금합니다 . 키가 해시 코드, 메모리 참조 또는 할당 우선 순위에 따라 보완?

같은 쌍이 Map항상 같은 순서가 아니라는 것을 의미합니다.


java.util.HashMap순서가 없습니다. 당신은 이상을 가정 할 수없고 또 하나의 가정합니다.

이 클래스는지도의 순서를 보장하지 않습니다. 특히 주문이 시간이 지나도 일정하게 유지 보장은 없습니다.

java.util.LinkedHashMap 삽입 순서를 사용합니다.

이 구현은 HashMap모든 항목을 통해 유지 실행되는 점에서 이중 연결 목록을 유지 합니다 . 이 연결 목록은 반복 순서를 정의하며 일반적으로 키가 맵에 삽입 된 순서 (삽입 순서)입니다.

java.util.TreeMap, a 는 키의 자연 순서 또는 사용자 지정 순서를 사용합니다.SortedMap

지도 Comparator는 사용되는 생성자에 따라 해당 키의 순서 또는 지도 생성시 이에 따라 정렬 됩니다.


우선 : HashMap특히 안정된 정의 된 주문을 제공하지 않습니다 . 당신이 관찰 아무것도 간단하게 구현 세부이며, 그래서 당신은 어떤 방법에 따라 달라집니다.

겉보기에 무작위로 정렬되는 이유를 아는 것이 좋습니다. 다음은 기본 아이디어입니다.

HashMap에는 항목을 저장할 여러 버킷 (배열로 구현 됨)이 있습니다.

항목이 맵에 추가 할 항목에서 파생 된 값 hashCode과 .NET Framework의 버킷 크기를 기반으로 버킷에 할당 HashMap됩니다. (충돌이라고하는 버킷이 이미 채워져있을 수 있습니다. 이것은 우아하고 처리 개념을 변경하지 않기 때문에 설명에 대한 처리를 무시하겠습니다.)

전체의 인식 된 순서에 따라 (예 :를 반복하여 반환 됨

Map)은 해당 버킷의 항목 순서에 따라 따라합니다.

크기가 다시 해시 될 때마다 (맵이 충만 임계 값을 초과하므로) 버킷 수가 변경됩니다. 즉, 버킷 위치도 버킷 수에서 파생되기 때문에 각 요소의 위치가 변경 될 수 있습니다.


HashMap전혀 정렬하지 않습니다. 키 값을 기준으로 정렬하는 맵의 경우 TreeMap대신 사용 합니다.

JavaDocs에서 TreeMap:

SortedMap 인터페이스의 Red-Black 트리 기반 구현. 이 클래스는 사용되는 생성자에 따라 맵이 키의 클래스 (Comparable 참조)의 자연 순서에 따라 또는 정렬되거나 생성시 비교기에 따라 오름차순 키 순서로 정렬됩니다.

의 문서에서 HashMap:

이 클래스는지도의 순서를 보장하지 않습니다. 특히 주문이 시간이 지나도 일정하게 유지 보장은 없습니다.


A Map는 정렬 된 데이터 구조가 아닙니다 HashMap. 특정 순서 존재 하는 항목에 의존성이 있습니다. 과 및 Map같은 일부 구현 은 특정 순서를 보장하지만 보장 하지 않습니다.LinkedHashMapTreeMapHashMap

으로 무슨 일 내부적이 일어나는지 정말로 알고 싶다면 소스 코드를 HashMap찾아 보십시오. - JDK 디렉토리에 있어야 설치하는 인 src.zip 에서 찾을 수 있습니다 .

HashMap에는 항목을 저장하는 여러 "버킷"이 있습니다. 항목이 저장되는 버킷은 항목 키의 해시 코드에 의해 결정됩니다. 항목이 표시되는 순서 HashMap는 키의 해시 코드에 따라 늘어납니다. 그러나 특정 순서에있는 항목에 의존하는 프로그램을 작성하지 않습니다. HashMapJava의 버전에서 구현이 변경 될 수 있으며 프로그램이 더 이상 작동하지 않을 수 있습니다.


hashmap에 요소의 순서가 정의되지 않습니다.


해시 테이블에는 정의 된 순서가 없습니다. 키는 배치는 코드를 기반으로 배치에 배치되어 있습니다.


HashMap은 키의 일부를 사용하여 생성 된 고유 한 해시 값을 사용하여 값을 저장합니다. 이 해시 값은 저장 될 주소에 매핑됩니다. 이것이 액세스 O (1)를 보장하는 방법입니다.

반면 LinkedHashmap은지도에 추가 한 순서를 유지합니다.

참고 URL : https://stackoverflow.com/questions/2817695/how-does-java-order-items-in-a-hashmap-or-a-hashtable

반응형