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

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

高洛峰
풀어 주다: 2017-01-17 11:52:00
원래의
1567명이 탐색했습니다.

오늘 통계를 할 때 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 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 중국어 사이트를 주목해주세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿