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

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

高洛峰
高洛峰원래의
2017-01-19 09:42:181641검색

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 super T> 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 중국어 웹사이트를 참고하세요!


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