Java Map을 Value별로 정렬하는 방법
• 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 정렬의 실현 방법에 따라 여러분에게 도움이 되었으면 합니다. 만약에 궁금한 것이 있으면 저에게 메시지를 남겨 주십시오. 편집자는 제때에 여러분에게 회답할 것입니다.여기에서도 저희 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.