배경
알고리즘 문제를 풀다가 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 시키면 된다.