값으로 HashMap을 정렬하는 방법
기사에서 보았 듯이ArrayList를 정렬하는 방법< 티> . 이 튜토리얼에서는 Java에서 HashMap을 오름차순 및 내림차순으로 정렬하는 방법을 배웁니다. 이것은 ArrayList. 와 거의 동일합니다. 인터페이스를 구현하는 "Comparator"라는 클래스를 만듭니다. 비교기 이 자습서의 두 예제에서 비교를 수행합니다.1) Comparator로 정렬하고 결과를 TreeMap에 넣습니다
Comparator 클래스의 인스턴스를 TreeMap 생성자의 매개변수로 전달하는 이유는 무엇입니까? 단순히 TreeMap 때문입니다< 케이, V> Map 인터페이스를 HashMap으로 구현하고 TreeMap(Comparator comp) 생성자를 갖습니다. 유일한 차이점은 TreeMap이 keys.import java.util.Comparator;
가져 오기 java.util.HashMap;
import java.util.Map;
import java.util.TreeMap입니다.
public class Tri {
public static void main(String[] args) {
HashMapmap = new HashMap ();
비교기 comp = new 비교기(지도);
TreeMapmap_apres = new TreeMap (comp);
map.put("A",49);
map.put("B",18);
map.put("C",92);
map.put("D",37);
map.put("E",62);
System.out.println("정렬하기 전에: "+map);
map_apres.putAll(지도);
System.out.println("정렬 후: "+map_apres);
}
}
class Comparator는 Comparator{
Map튜플;
public Comparator(HashMapmap) {
this.tuple = map;
}
//이 비교기는 요소를 내림차순으로 정렬합니다
@Override
public int compare(Object o1, Object o2) {
// TODO 자동 생성 메서드 stub
if (int) tuple.get(o1) >= (int) tuple.get(o2)) {
return -1;
} else {
return 1;
}
}
}
2) Collections.sort
로 HashMap 정렬 이 예에서는 Double 유형의 항목을 정렬합니다. 항목은 List 인터페이스를 구현하는 LinkedList에 복사된 다음 Collections.sort 이전 문서에서 다른 개체 컬렉션을 정렬하는 데 사용했습니다. 정렬 후 LinkedList에서 정렬된 요소를 output.public static void main(String[] args) {실행:
HashMapmap = new HashMap ();
map.put("A",18.5);
map.put("E",76.8);
map.put("C",24.1);
map.put("F",86.2);
map.put("D",5.7);
map.put("B",84.6);
System.out.println("정렬하기 전에: "+map);
System.out.println("정렬 후: "+sortWithValue(map));
}
public 정적 HashMap< 문자열, Double> sortWithValue ( 해시 맵< 문자열, Double> 지도 ){
목록< Map.Entry를 사용합니다< 문자열, Double> > 목록 =
새 LinkedList< Map.Entry를 사용합니다< 문자열, Double> > ( map.entrySet() );
Collections.sort( 목록, 새 비교기< Map.Entry를 사용합니다< 문자열, Double> > (){
public int compare( Map.Entry< 문자열, Double> o1, Map.Entry< 문자열, Double> o2 ){
반환 (o1.getValue()).compareTo( o2.getValue());
}
});
해시맵< 문자열, Double> map_apres = 새로운 LinkedHashMap< 문자열, Double> ();
for(Map.Entry< 문자열, Double> 항목 : 목록)
map_apres.put( entry.getKey(), entry.getValue() );
반환 map_apres;
}
정렬 전: {D=5.7, E=76.8, F=86.2, A=18.5, B=84.6, C=24.1}내림차순으로 정렬하려면 compare에서 비교 순서를 변경하기만 하면 됩니다.
정렬 후: {D=5.7, A=18.5, C=24.1, E=76.8, B=84.6, F=86.2}
참조:return(o2.getValue())).compareTo( o1.getValue());
Oracle 문서 - HashMap
TutorialsPoint - HashMap 클래스
Documentation Comparator
LinkedHashMap 문서