Java Map을 Value별로 정렬하는 방법

4194 단어 javamapvalue정렬
맵은 키 값이 맞는 집합 인터페이스로 그 실현 클래스는 주로 HashMap, TreeMap, Hashtable, LinkedHashMap 등을 포함한다.
• TreeMap: 빨간색과 검은색 트리(Red-Black tree)를 기반으로 하는 NavigableMap을 구현합니다. 이 맵은 키의 자연 순서에 따라 정렬되거나 맵을 만들 때 제공되는Comparator에 따라 정렬됩니다. 구체적으로 사용하는 구조 방법에 따라 정렬됩니다.
• HashMap의 값은 순서가 없습니다. 키의 HashCode에 따라 이루어집니다. 이 무질서한 HashMap에 대해 우리는 어떻게 정렬을 실현해야 합니까?TreeMap의 value 정렬을 참조합니다.
Map.Entry가 Collections 보기로 돌아갑니다.
키별 정렬
TreeMap은 기본적으로 오름차순이며, 정렬 방식을 바꾸려면 비교기:Comparator를 사용해야 합니다.Comparator는 집합 대상이나 그룹을 정렬할 수 있는 비교기 인터페이스로 이 인터페이스를 실현하는publiccompare(T o1, To2) 방법으로 정렬할 수 있다.
참고: 다음 코드는 Jdk1.6 테스트에서 통과되었습니다.
TreeMap 기본적으로 키 오름차순으로 정렬

public static void keyUpSort() {
//  ,TreeMap key 
Map<String, Integer> map = new TreeMap<String, Integer>();
map.put("acb1", 5);
map.put("bac1", 3);
map.put("bca1", 20);
map.put("cab1", 80);
map.put("cba1", 1);
map.put("abc1", 10);
map.put("abc2", 12);
//  ,TreeMap key 
System.out.println("------------ ,TreeMap key --------------------");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
TreeMap 정렬 방식을 수정하고 key 내림차순으로 정렬

public static void keyDownSort() {
// TreeMap, key 
//  
Comparator<String> keyComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o2.compareTo(o1);
}
};
Map<String, Integer> map = new TreeMap<String, Integer>(keyComparator);
map.put("acb1", 5);
map.put("bac1", 3);
map.put("bca1", 20);
map.put("cab1", 80);
map.put("cba1", 1);
map.put("abc1", 10);
map.put("abc2", 12);
System.out.println("------------TreeMap key --------------------");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
Value별 정렬
다음은 HashMap과 마찬가지로 TreeMap에 따라 Value 오름차순으로 정렬하는 것만 보여 줍니다.
Value 오름차순으로 TreeMap 정렬 방법 수정
참고: 일반적으로 맵은 컬렉션을 사용할 수 없습니다.sort () 방법은 정렬하지만, 맵을list로 변환한 후에 정렬할 수 있습니다.

public static void valueUpSort() {
//  ,TreeMap key 
Map<String, Integer> map = new TreeMap<String, Integer>();
map.put("acb1", 5);
map.put("bac1", 3);
map.put("bca1", 20);
map.put("cab1", 80);
map.put("cba1", 1);
map.put("abc1", 10);
map.put("abc2", 12);
//  
Comparator<Map.Entry<String, Integer>> valueComparator = new Comparator<Map.Entry<String,Integer>>() {
@Override
public int compare(Entry<String, Integer> o1,
Entry<String, Integer> o2) {
// TODO Auto-generated method stub
return o1.getValue()-o2.getValue();
}
};
// map list 
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
//  
Collections.sort(list,valueComparator);
//  ,TreeMap key 
System.out.println("------------map value --------------------");
for (Map.Entry<String, Integer> entry : list) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
테스트 결과

------------ ,TreeMap key --------------------
abc1:10
abc2:12
acb1:5
bac1:3
bca1:20
cab1:80
cba1:1
------------TreeMap key --------------------
cba1:1
cab1:80
bca1:20
bac1:3
acb1:5
abc2:12
abc1:10
------------map value --------------------
cba1:1
bac1:3
acb1:5
abc1:10
abc2:12
bca1:20
cab1:80
위에서 말한 것은 여러분이 소개해 드린 자바맵이 Value 정렬의 실현 방법에 따라 여러분에게 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기