HashMap의 Value값을 기준으로 정렬하기

강창민·2022년 5월 15일
0

배경
알고리즘 문제를 풀다가 HashMap에 들어있는 Value값을 기준으로 정렬해야 할 경우가 생겼다. 이에 대해 여러가지 자료를 찾아보며 정리를 해 두어야 겠다고 생각했다.

방법
먼저 Collections.sort()를 사용하기 위해서 List 형태로 Map을 가져와야 한다. 그러므로 Map.entrySet()을 이용하여 아래와 같이 MapEntry SetList 형태로 저장한다.

1. Entry에 내장된 comparingByValue()함수를 이용하는 법

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

Value값을 기준으로 오름차순으로 정렬한다. 그렇다면, 내림차순으로 정렬 시에는 어떻게 해야 할까?

  1. 자바 Comparator를 이용하는 방법
  • 자바는 사용자의 의도에 맞게 정렬을 할 수 있는 Comparator인터페이스를 제공한다. 자바에서 인터페이스를 사용할 때는 내장되어있는 함수를 반드시 재정의 해야 한다는 것을 잊지 말자.
  • Comparatorcompare내장 함수를 오버라이딩하여 사용하는데, 자바 클래스 2개를 파라미터로 받아 비교하여 오름(혹은 내림)차순으로 정렬하는데 많이 사용된다.
  • 매우 자주 사용해야하는 기능이므로 반드시 알아두자.
list.sort(new Comparator<Map.Entry<String, Integer>>() {
    @Override
    public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
		return o1.getValue() - o2.getValue();
    }
});

내림차순으로 정렬시에는, o1과 o2의 순서를 바꿔서 return 시키면 된다.

profile
오늘 그것을 할 수 없다면, 대체 무슨 근거로 내일 그것을 할 수 있다고 생각하는가?

0개의 댓글