[Array & Hash] Top K Frequent Element_HashMap Value 기준으로 정렬하기

김예인·2023년 11월 21일
0

알고리즘 문제풀이

목록 보기
8/12

개요

Top K Frequent Element 알고리즘 문제를 풀다가 HashMap을 Value 기준으로 정렬해야 했는데, 또 쓰게될 것 같아서 정리하려 한다.

내용

직접적으로 HashMap 을 Value 기준으로 정렬하는 내장함수는 Java 에 존재하지 않는다. HashMap 은 순서를 유지하지 않는 자료 구조기 때문!

sort 함수를 사용하기 위해 List 형태로 Map을 가져와야 한다. Map을 List 형태로 가져오기 위해선 먼저 Set 으로 변형 후 List 로 바꾼다.

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

Entry 내장 함수 사용
Map.Entry 에 있는 comparingByValue() 함수를 사용하여 정렬

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

entryList.sort(Map.Entry.comparingByValue()); // 오름차순

내림차순 정렬 시 .reversed() 를 덧붙여준다.

단, Comparator 연산을 체이닝할 때 (예: reversed()를 사용할 때) Java 컴파일러가 타입 매개변수를 자동으로 유추하지 못하여 오류가 발생한다.

그러므로 타입을 명시적으로 기재해야 코드가 잘 작동한다.

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

entryList.sort(Map.Entry.<Integer, Integer>comparingByValue().reversed()); // 내림차순
profile
백엔드 개발자 김예인입니다.

0개의 댓글