> Java > java지도 시간 > 본문

키별 정렬과 값별 정렬 Java Map 구현 방법

高洛峰
풀어 주다: 2017-01-19 09:42:18
원래의
1629명이 탐색했습니다.

1. 이론적 준비

Map은 키-값 쌍의 컬렉션 인터페이스입니다. 구현 클래스에는 주로 HashMap, TreeMap, Hashtable 및 LinkedHashMap 등이 포함됩니다.

TreeMap: Red-Black 트리를 기반으로 하는 NavigableMap 구현입니다. 이 트리는 키의 자연스러운 순서에 따라 정렬되거나, 사용된 구성 방법에 따라 맵이 생성될 때 제공된 Comparator에 따라 정렬됩니다.

HashMap의 값이 순서가 아닙니다. 키의 HashCode에 따라 구현됩니다. 순서가 지정되지 않은 HashMap에 대한 정렬을 어떻게 구현합니까? TreeMap의 값 정렬을 참고하세요.

Map.Entry는 컬렉션 보기를 반환합니다.

2. 키 정렬

TreeMap은 기본적으로 정렬 방법을 변경해야 하는 경우 비교기인 Comparator를 사용해야 합니다. Comparator는 컬렉션 객체나 배열을 정렬할 수 있는 비교기 인터페이스입니다. 이 인터페이스의 공개 Compare(T o1,To2) 메서드를 구현하면 다음과 같이 정렬이 가능합니다.

import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
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("b", "ccccc");
    map.put("d", "aaaaa");
    map.put("c", "bbbbb");
    map.put("a", "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:aaaaa
c:bbbbb
b:ccccc
a:ddddd
로그인 후 복사
로그인 후 복사

3. 값 정렬

위의 예는 TreeMap의 키 값에 따라 정렬하는 것이지만 때로는 TreeMap의 값에 따라 정렬해야 할 때도 있습니다. 값을 정렬하려면 지정된 비교기에 의해 생성된 순서에 따라 지정된 목록을 정렬하는 Collections의 sort(List list, Comparator c) 메서드를 사용해야 합니다. 그러나 전제 조건이 있습니다. 즉, 모든 요소는 다음과 같이 제공된 비교기에 따라 비교되어야 합니다.

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class TreeMapTest {
  public static void main(String[] args) {
    Map<String, String> map = new TreeMap<String, String>();
    map.put("a", "ddddd");
    map.put("c", "bbbbb");
    map.put("d", "aaaaa");
    map.put("b", "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()); 
     } 
  }
}
로그인 후 복사

실행 결과는 다음과 같습니다.

d:aaaaa
c:bbbbb
b:ccccc
a:ddddd
로그인 후 복사
로그인 후 복사

위의 키별 정렬, 값별 정렬의 Java Map 구현 방법은 모두 편집자가 공유한 내용이므로 참조할 수 있기를 바라며, 또한 모든 분들이 PHP 중국어 웹사이트를 지원해 주시길 바랍니다.

키별 정렬, 값별 정렬 등 더 많은 Java Map 구현 방법을 보려면 PHP 중국어 웹사이트를 참고하세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!