[자바] 키 / 값으로 HashMap을 정렬하는 방법은 무엇입니까?

먼저, 작은 토픽 (> _ <)
 
은 정수 배열을 제공하고 각 숫자의 빈도를 세며 출현 횟수가 증가하는 순서로 정렬됩니다. 출현 횟수가 같으면 증가하는 순서로 정렬됩니다. 숫자 자체의 수.
 
입력 : [5, 2, 3, 3, 1, 3, 4, 2, 5, 2, 3, 5]

출력 : [[1, 1], [4, 1], [2, 3], [5, 3], [3, 4]]

 

통계 빈도는 HashMap을 직접 사용하지만 :

HashMap이 순서가 지정되지 않았습니다. 다시 쓸 수있는 Comparator가 없습니다 (Comparator).

 
영리한 아이디어가 있습니다.

Map의 요소 인 Entry <K, V> 개체를 목록에 배치합니다. 따라서 컬렉션의 정렬 방법을 사용하고 다시 작성된 비교기를 전달할 수 있습니다.

 
구체적인 코드는 다음과 같습니다.

List<Map.Entry<Integer, Integer>> list = new ArrayList<>(map.entrySet());

Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
    
    
	@Override
	public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
    
    
        if (o1.getValue() != o2.getValue()) {
    
    
        	return o1.getValue() - o2.getValue();
        } else {
    
    
        	return o1.getKey() - o2.getKey();
        }
    }
});

추천

출처blog.csdn.net/m0_46202073/article/details/114491895