먼저, 작은 토픽 (> _ <)
은 정수 배열을 제공하고 각 숫자의 빈도를 세며 출현 횟수가 증가하는 순서로 정렬됩니다. 출현 횟수가 같으면 증가하는 순서로 정렬됩니다. 숫자 자체의 수.
입력 : [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();
}
}
});