[Java] Map을 Key, Value로 정렬하기

Jiseong Lee·2022년 4월 29일
4

알고리즘

목록 보기
1/1

개요

Java에서 HashMap 정렬이 필요할 때, 그 방법에 대해 알아볼 것이다.

정렬 기준은 key, value 두가지로 나눌 수 있다.

1. Key 값을 기준으로 정렬하기

map 의 keySet을 이용하여 정렬한다.
오름차순 시에는 Collection.sort(), 내림차순 시에는 Collection.reverse() 메소드를 사용하여 정렬한다.

import java.util.*;

public class Sort {

    public static void main(String[] args) {

        Map<String, Integer> map = new HashMap<>();

        map.put("A", 10);
        map.put("D", 30);
        map.put("C", 20);
        map.put("B", 40);


        List<String> keySet = new ArrayList<>(map.keySet());

        // 키 값으로 오름차순 정렬
        Collections.sort(keySet);

        for (String key : keySet) {
            System.out.print("Key : " + key);
            System.out.println(", Val : " + map.get(key));
        }
       
        /*  결과
            Key : A, Val : 10
            Key : B, Val : 40
            Key : C, Val : 20
            Key : D, Val : 30
         */
        
        

        // 키 값으로 내림차순 정렬
        Collections.reverse(keySet);

        for (String key : keySet) {
            System.out.print("Key : " + key);
            System.out.println(", Val : " + map.get(key));
        }
        
        /*  결과
            Key : D, Val : 30
            Key : C, Val : 20
            Key : B, Val : 40
            Key : A, Val : 10
        */
	}
}

2.Value 값을 기준으로 정렬하기

Value 값을 기준으로 정렬할 때는 comparator를 사용하여 정렬한다.

comparator는 람다 표현식으로 간단하게 표현할 수도 있다.

import java.util.*;

public class Sort {

    public static void main(String[] args) {

		Map<String, Integer> map = new HashMap<>();

        map.put("A", 10);
        map.put("D", 30);
        map.put("C", 20);
        map.put("B", 40);


        List<String> keySet = new ArrayList<>(map.keySet());

        // Value 값으로 오름차순 정렬
        keySet.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return map.get(o1).compareTo(map.get(o2));
            }
        });

        for (String key : keySet) {
            System.out.print("Key : " + key);
            System.out.println(", Val : " + map.get(key));
        }

        /*
            결과
            Key : A, Val : 10
            Key : C, Val : 20
            Key : D, Val : 30
            Key : B, Val : 40
         */

        // Value 값으로 내림차순 정렬
        // 위 comparator 람다 표현식으로
        keySet.sort((o1, o2) -> map.get(o2).compareTo(map.get(o1)));

        for (String key : keySet) {
            System.out.print("Key : " + key);
            System.out.println(", Val : " + map.get(key));
        }

        /* 결과
            Key : B, Val : 40
            Key : D, Val : 30
            Key : C, Val : 20
            Key : A, Val : 10
         */
	}
}

더 많은 방법이 있으나 가장 간단하게 정렬할 수 있는 방법을 알아보았다.

profile
안녕하세요

1개의 댓글

comment-user-thumbnail
2024년 2월 2일

깔끔하게 잘 정리하셔서 보기 편하네요 잘 보고 갑니다!

답글 달기