배경
알고리즘 문제를 풀다가 HashMap에 들어있는 Value값을 기준으로 정렬해야 할 경우가 생겼다. 이에 대해 여러가지 자료를 찾아보며 정리를 해 두어야 겠다고 생각했다.
방법
먼저 Collections.sort()를 사용하기 위해서 List 형태로 Map을 가져와야 한다. 그러므로 Map.entrySet()을 이용하여 아래와 같이 Map의 Entry Set을 List 형태로 저장한다.
1. Entry에 내장된 comparingByValue()함수를 이용하는 법
List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet());
list.sort(Map.Entry.comparingByValue());
Value값을 기준으로 오름차순으로 정렬한다. 그렇다면, 내림차순으로 정렬 시에는 어떻게 해야 할까?
Comparator를 이용하는 방법Comparator인터페이스를 제공한다. 자바에서 인터페이스를 사용할 때는 내장되어있는 함수를 반드시 재정의 해야 한다는 것을 잊지 말자.Comparator는 compare내장 함수를 오버라이딩하여 사용하는데, 자바 클래스 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 시키면 된다.