Java Map 키 정렬 및 Value 정렬 구현 방법

3437 단어 javamapvalue정렬
1. 이론적 준비
맵은 키 값이 맞는 집합 인터페이스로 그 실현 클래스는 주로 HashMap, TreeMap, Hashtable, LinkedHashMap 등을 포함한다.
TreeMap: 빨간색과 검은색 트리(Red-Black tree)를 기반으로 하는 NavigableMap을 구현합니다. 이 맵은 키의 자연 순서에 따라 정렬되거나 맵을 만들 때 제공되는Comparator에 따라 정렬됩니다. 구체적으로 사용하는 구조 방법에 따라 정렬됩니다.
HashMap의 값은 순서가 없습니다. 이것은 키의 HashCode에 따라 이루어집니다. 이 무질서한 HashMap에 대해 우리는 어떻게 정렬을 실현해야 합니까?TreeMap의 value 정렬을 참조합니다.
Map.Entry가 Collections 보기로 돌아갑니다.
2. 키 정렬
TreeMap은 기본적으로 오름차순이며, 정렬 방식을 바꾸려면 비교기:Comparator를 사용해야 합니다.Comparator는 집합 대상이나 그룹을 정렬할 수 있는 비교기 인터페이스로 이 인터페이스를 실현하는 public 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. value 정렬
위의 예는 TreeMap의 키 값에 따라 정렬하는 것이지만, 때때로 우리는 TreeMap의value에 따라 정렬해야 한다.value 정렬에 대해 우리는 Collections의sort(Listlist,Comparatorc) 방법을 빌려야 한다. 이 방법은 지정된 비교기에서 발생하는 순서에 따라 지정된 목록을 정렬한다.그러나 전제 조건이 하나 있다. 그것은 모든 원소가 제공된 비교기에 따라 비교할 수 있어야 한다는 것이다. 다음과 같다.

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은 key 정렬과 Value 정렬의 실현 방법은 바로 편집자가 여러분에게 공유한 모든 내용입니다. 참고 부탁드리며 많은 응원 부탁드립니다.

좋은 웹페이지 즐겨찾기