오늘 통계를 할 때 X축의 지역을 지역번호에 따라 정렬해야 합니다. XMLData 구성에 사용되는 지도는 데이터 통계에 사용되므로 통계 과정에서 지도를 정렬해야 합니다.
1. 맵에 대한 간략한 소개
맵 정렬을 설명하기 전에 먼저 맵에 대해 조금 알아볼까요? map은 키-값 쌍의 컬렉션 인터페이스이며 구현 클래스에는 주로 HashMap, TreeMap, Hashtable 및 LinkedHashMap 등이 포함됩니다. 네 가지의 차이점은 다음과 같습니다(간략한 소개):
HashMap: 가장 일반적으로 사용되는 맵으로, 키의 HashCode 값을 기반으로 데이터를 저장합니다. 해당 값은 키를 기반으로 직접 얻을 수 있습니다. 그리고 빠른 접근 속도를 가지고 있습니다. HashMap은 한 레코드의 키 값만 Null이 되도록 허용합니다(여러 레코드를 덮어쓰게 됨). 여러 레코드의 값이 Null이 되도록 허용합니다. 비동기식.
TreeMap: 키에 따라 저장하는 레코드를 정렬할 수 있습니다. 기본값은 오름차순입니다. 또한 Iterator를 사용하여 TreeMap을 탐색할 때 얻은 레코드가 정렬됩니다. TreeMap은 키 값이 null이 되는 것을 허용하지 않습니다. 비동기식.
Hashtable: 키와 값 값이 null이 허용되지 않는다는 점을 제외하면 HashMap과 유사합니다. 즉, 스레드 동기화를 지원합니다. 즉, 언제든지 하나의 스레드만 Hashtable에 쓸 수 있습니다. 쓰기에서 Hashtale로 연결되는 속도가 느려집니다.
LinkedHashMap: 레코드 삽입 순서를 저장합니다. LinkedHashMap을 순회하기 위해 Iterator를 사용할 때 먼저 얻은 레코드를 먼저 삽입해야 합니다. 순회 중에는 HashMap보다 속도가 느립니다. 키와 값은 모두 비어 있고 비동기적으로 허용됩니다.
2. 지도 정렬
TreeMap
TreeMap은 기본적으로 오름차순으로 정렬 방법을 변경해야 합니다. 비교기: 비교기.
Comparator는 컬렉션 개체 또는 배열을 정렬할 수 있는 비교기 인터페이스입니다. 이 인터페이스의 공개 Compare(T o1, To2) 메서드를 구현하면 이 메서드는 주로 첫 번째 매개변수 o1을 기반으로 합니다. o2보다 작거나 같거나 크면 각각 음의 정수, 0 또는 양의 정수를 반환합니다.
public class TreeMapTest { public static void main(String[] args) { Map<String, String> map = new TreeMap<String, String>( new Comparator<String>() { public int compare(String obj1, String obj2) { // 降序排序 return obj2.compareTo(obj1); } }); map.put("c", "ccccc"); map.put("a", "aaaaa"); map.put("b", "bbbbb"); map.put("d", "ddddd"); Set<String> keySet = map.keySet(); Iterator<String> iter = keySet.iterator(); while (iter.hasNext()) { String key = iter.next(); System.out.println(key + ":" + map.get(key)); } } }
실행 결과는 다음과 같습니다.
d:ddddd
c:ccccc
b:bbbbb
a:aaaaa
위의 예는 올바른 정렬은 TreeMap의 키 값을 기준으로 하지만 때로는 TreeMap의 값을 기준으로 정렬해야 하는 경우도 있습니다. 값을 정렬하려면 지정된 비교기에 의해 생성된 순서에 따라 지정된 목록을 정렬하는 Collections의 sort(List
public class TreeMapTest { public static void main(String[] args) { Map<String, String> map = new TreeMap<String, String>(); map.put("d", "ddddd"); map.put("b", "bbbbb"); map.put("a", "aaaaa"); map.put("c", "ccccc"); //这里将map.entrySet()转换成list List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet()); //然后通过比较器来实现排序 Collections.sort(list,new Comparator<Map.Entry<String,String>>() { //升序排序 public int compare(Entry<String, String> o1, Entry<String, String> o2) { return o1.getValue().compareTo(o2.getValue()); } }); for(Map.Entry<String,String> mapping:list){ System.out.println(mapping.getKey()+":"+mapping.getValue()); } } }
실행 결과
a:aaaaa
b:bbbbb
c:ccccc
d:dddd
HashMap
우리 모두는 순서가 맞지 않는 HashMap 값을 가지고 있습니다. 이는 키의 HashCode에 따라 구현됩니다. 정렬되지 않은 HashMap에 대한 정렬을 어떻게 구현합니까? TreeMap의 값 정렬을 참조하면 HashMap의 정렬도 구현할 수 있습니다.
public class HashMapTest { public static void main(String[] args) { Map<String, String> map = new HashMap<String, String>(); map.put("c", "ccccc"); map.put("a", "aaaaa"); map.put("b", "bbbbb"); map.put("d", "ddddd"); List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(map.entrySet()); Collections.sort(list,new Comparator<Map.Entry<String,String>>() { //升序排序 public int compare(Entry<String, String> o1, Entry<String, String> o2) { return o1.getValue().compareTo(o2.getValue()); } }); for(Map.Entry<String,String> mapping:list){ System.out.println(mapping.getKey()+":"+mapping.getValue()); } } }
결과 실행
a:aaaaa
b:bbbbb
c:ccccc
d:ddddd
자세한 내용은 java 지도 정렬 방법을 참조하세요. 설명 (지도 수집 사용) 관련 기사는 PHP 중국어 사이트를 주목해주세요!