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();
}
}