지도의 유형
Java에서 MAP의 주요 기능은 키 값 쌍을 저장하는 것입니다. 키에 따라 값이 얻어 지므로 키는 반복 할 수 없습니다. 주로 다음 범주가 있습니다.
해시 맵 :
가장 일반적으로 사용되는 MAP는 키의 해시 코드 값에 따라 데이터를 저장하고 키에 따라 매우 빠른 액세스 속도로 값을 직접 얻을 수 있습니다. 가로 지르면 데이터 수집 순서가 완전히 무작위입니다. Hashmap은 하나의 레코드 만 NULL을 허용합니다. 여러 레코드의 값은 무일하게입니다. Hashmap은 스레드 동기화를 지원하지 않습니다. 즉, 여러 스레드는 언제든지 해시 맵을 작성할 수 있습니다. 데이터의 불일치로 이어질 수 있습니다. 동기화가 필요한 경우 컬렉션의 동기화 된 맵 방법을 사용하여 해시 맵 동기화 또는 ConsherThashMap을 사용할 수 있습니다. 해시 가능은 해시 맵과 유사합니다. 사전 클래스에서 물려받습니다. 차이점은 기록 된 키나 값이 비어 있지 않다는 것입니다. 스레드 동기화를 지원합니다. 즉, 하나의 스레드만이 언제든지 해시 테이블을 작성할 수 있으므로 쓸 때 Hashtable이 느려집니다.
LinkedHashMap
기록의 삽입 순서가 저장됩니다. Ierator로 LinkedHashMap을 가로 지르면 먼저 얻은 레코드를 먼저 삽입해야합니다. 시공 중에 매개 변수를 사용하여 응용 프로그램 수에 따라 정렬 할 수 있습니다. 가로 질 때 해시 맵보다 느려지지만 예외가 있습니다. Hashmap의 용량이 크고 실제 데이터가 적을 때 LinkedHashMap의 트래버스 속도는 실제 데이터와 관련이 있고 용량과 관련이 없기 때문에 Hashmap의 트래버스 속도는 용량과 관련이 있기 때문에 LinkedHashMap보다 느릴 수 있습니다.
트리 맵
SortMap 인터페이스를 구현하면 저장된 레코드를 키에 따라 정렬 할 수 있습니다. 기본적으로 키 값의 오름차순 순서로 정렬되거나 정렬 된 비교기를 지정할 수도 있습니다. 반복자로 가로 지르면 얻은 레코드가 정렬됩니다.
키 분류
맵 유형에 대한 위의 소개에서 Treemap에는 자체 키 정렬 기능이 있음을 알 수 있습니다. 생성 할 때 동시에 비교 인터페이스 만 구현하면됩니다. 예제는 다음과 같습니다.
개인 정적 void sort_by_key () {map <integer, integer> treemap = new treemap <> (새로운 비교기 <integer> () {@override public int compart (Integer O1, Integer O2) {반환 O2-O1; // 역 순서를 설명하게하십시오. // (int i = 0; i <100; i ++) {int key = (int) (10000*math.random ())에 대한 데이터를 채 웁니다. int value = (int) (10000*math.random ()); treemap.put (키, 값); } outMap (treemap); } public static void outmap (map <integer, integer> map) {for (정수 : map.keyset ()) {system.out.println ( "key ="+integer+"value ="+map.get (integer)); }}/* 결과는 다음과 같습니다. key = 9977 value = 80key = 9684 value = 7108key = 9422 value = 1706key = 9264 value = 1210key = 9248 value = 4758key = 9024 값 = 7048key = 8892 값 = 3124key = 8879 value = 6414key = 6414key = 6414key value = 8171key = 8728 value = 1538key = 8513 value = 4956key = 8462 value = 5617key = 8355 value = 8912*/위에서 볼 수 있듯이 키별로 정렬하는 것은 어렵지 않지만 정렬을 배치하는 것이 더 번거 롭기 때문에 맵을 돌려야합니다.
가치별로 정렬하십시오
MAP는 Java 에서이 기능이 없으므로 직접 구현해야합니다. 아이디어는 다음과 같습니다.
Java의 목록은 비교 인터페이스를 사용할 수 있습니다.
지도는 실제로 <> 컬렉션입니다. 따라서 목록을 사용하면 <Entry <>>은 정렬 된 요소를 LinkedMap에 정렬하고 삽입 할 수 있습니다.
코드 구현은 다음과 같습니다.
개인 정적 맵 <정수, 정수> SortMap (map <integer, integer> linkedMap) {list <map.entry <integer, integer >> cache = new arraylist <> (linkedMap.entryset ()); // 비교 함수 collections.sort (캐시, 새 비교기 <map.entry <integer, integer >> () {@override public int compart (Entry <integer, integer> o1, enther <integer, integer> o2) {// 반환 값이 0이면 o1이 o }); Map <Integer, Integer> resultmap = New LinkedHashMap <> (); // 결과를 linkedMap에 삽입하고 (int i = 0; i <cache.size (); i ++) {resultmap.put (cache.get (i) .getKey (), cache.get (i) .getValue ()); } return resultMap; }/*결과 : 7965 99661067 99631720 98333257 97383934 9578777 93481924 93153472 92703649 91145892 9078*/이런 식으로 값별로 정렬하고 키별로 정렬 할 수 있습니다.