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
같은 일부 구현 은 특정 순서를 보장하지만 보장 하지 않습니다.LinkedHashMap
TreeMap
HashMap
으로 무슨 일 내부적이 일어나는지 정말로 알고 싶다면 소스 코드를 HashMap
찾아 보십시오. - JDK 디렉토리에 있어야 설치하는 인 src.zip 에서 찾을 수 있습니다 .
HashMap
에는 항목을 저장하는 여러 "버킷"이 있습니다. 항목이 저장되는 버킷은 항목 키의 해시 코드에 의해 결정됩니다. 항목이 표시되는 순서 HashMap
는 키의 해시 코드에 따라 늘어납니다. 그러나 특정 순서에있는 항목에 의존하는 프로그램을 작성하지 않습니다. HashMap
Java의 버전에서 구현이 변경 될 수 있으며 프로그램이 더 이상 작동하지 않을 수 있습니다.
hashmap에 요소의 순서가 정의되지 않습니다.
해시 테이블에는 정의 된 순서가 없습니다. 키는 배치는 코드를 기반으로 배치에 배치되어 있습니다.
HashMap은 키의 일부를 사용하여 생성 된 고유 한 해시 값을 사용하여 값을 저장합니다. 이 해시 값은 저장 될 주소에 매핑됩니다. 이것이 액세스 O (1)를 보장하는 방법입니다.
반면 LinkedHashmap은지도에 추가 한 순서를 유지합니다.
참고 URL : https://stackoverflow.com/questions/2817695/how-does-java-order-items-in-a-hashmap-or-a-hashtable
'ProgramingTip' 카테고리의 다른 글
ID의 시작과 끝에서 일치하는 jQuery 선택기? (0) | 2020.12.03 |
---|---|
두 목록 비교 (0) | 2020.12.03 |
Android WebView가 쿠키 또는 비밀번호를 저장하지 않도록 설정 (0) | 2020.12.03 |
Android의 다른 로케일에서 어디서 얻는 방법은 무엇입니까? (0) | 2020.12.03 |
목록의 요소가 목록인지 확인하는 방법 (Python에서)? (0) | 2020.12.03 |