[Java] Map을 Key 또는 Value를 기준으로 정렬하기

2025. 1. 20. 13:44·JAVA

Key를 기준으로 정렬하기

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        Map<String, Integer> map = new HashMap<>();

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

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

        // Key 값을 기준으로 오름차순 정렬하기
        Collections.sort(keySet);
        System.out.println(keySet);
        // [A, B, C]

        // Key 값을 기준으로 내림차순 정렬하기
        Collections.sort(keySet, Collections.reverseOrder());
        System.out.println(keySet);
        // [C, B, A]
    }
}

Value를 기준으로 정렬하기

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        Map<String, Integer> map = new HashMap<>();

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

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

        // Value 값을 기준으로 Key를 오름차순 정렬하기
        Collections.sort(keySet, (o1, o2) -> map.get(o1) - map.get(o2));
        System.out.println(keySet);
        // [A, C, B]

        // Value 값을 기준으로 Key를 내림차순 정렬하기
        Collections.sort(keySet, (o1, o2) -> map.get(o2) - map.get(o1));
        System.out.println(keySet);
        // [B, C, A]
    }
}

실전 적용

- 백준 2910 빈도 정렬(https://www.acmicpc.net/problem/2910)에 적용해보자.

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());

        int N = Integer.parseInt(st.nextToken());
        int C = Integer.parseInt(st.nextToken());

        Map<Integer, Integer> map = new LinkedHashMap<>();

        st = new StringTokenizer(br.readLine());
        for (int i = 0; i < N; i++) {
            int num = Integer.parseInt(st.nextToken());
            map.put(num, map.getOrDefault(num, 0) + 1);
        }

        List<Integer> keySet = new ArrayList<>(map.keySet());
        
        // Value 값을 기준으로 Key 값 내림차순 정렬하기
        Collections.sort(keySet, (o1, o2) -> map.get(o2).compareTo(map.get(o1)));

        for (int key : keySet) {
            for (int i = 0; i < map.get(key); i++) {
                bw.write(key + " ");
            }
        }

        bw.flush();
    }
}

 

저작자표시 비영리 변경금지 (새창열림)
'JAVA' 카테고리의 다른 글
  • [Java] Map computeIfAbsent(), computeIfPresent() 메소드
  • 자바 정렬 Comparable, Comparator, Collections.sort(), Arrays.sort()
  • 자바 정규 표현식(Regex)
SiwonHae
SiwonHae
프로그래밍을 공부하고 있는 학생입니다.
  • SiwonHae
    시원해의 블로그
    SiwonHae
  • 전체
    오늘
    어제
    • 전체보기 (150)
      • PS(Problem Solving) (95)
        • C (25)
        • C++ (33)
        • JAVA (37)
      • Algorithm & Data Structure (13)
      • Computer Science (12)
        • Network (2)
        • Design Pattern (10)
      • Back-end (6)
        • Spring (5)
      • Front-end (1)
        • React (1)
      • JAVA (4)
      • 정보처리기사 (17)
      • SQLD (2)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 인기 글

  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
SiwonHae
[Java] Map을 Key 또는 Value를 기준으로 정렬하기
상단으로

티스토리툴바