>  기사  >  Java  >  Java에서 지도를 정렬하는 방법에 대한 자세한 설명(지도 컬렉션 사용)

Java에서 지도를 정렬하는 방법에 대한 자세한 설명(지도 컬렉션 사용)

高洛峰
高洛峰원래의
2017-01-17 11:52:001533검색

오늘 통계를 할 때 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 list, Comparator super T> c) 메서드를 사용해야 합니다. 그러나 전제 조건이 있습니다. 즉, 제공된 비교기에 따라 모든 요소를 ​​비교할 수 있어야 합니다. 다음과 같습니다:

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 중국어 사이트를 주목해주세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.