기본적으로 LinkedHashMap을 사용하면, 입력된 Key의 순서대로 정렬된 Map을 제공한다. 그러나 오름차순/내림차순 등의 다른 정렬 방법이 필요하다면, key 또는 value로 정렬이 가능하다.
예제 : 백준 20291 - 파일정리
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
HashMap<String, Integer> map = new HashMap<>();
for(int i = 0; i<n; i++){
StringTokenizer st = new StringTokenizer(br.readLine());
String[] str = st.nextToken().split("\\.");
map.put(str[1], map.getOrDefault(str[1], 0)+1);
}
List<String> keySet = new ArrayList<>(map.keySet());
Collections.sort(keySet);
for (String key : keySet){
System.out.println(key + " " + map.get(key));
}
}
}
map의 keySet을 이용하여 정렬한다.
Collections.sort()는 기본적으로 오름차순을 지원한다.
내림차순으로 정렬하려면 Collections.sort(keySet, Collections.reverseOrder())과 같이 인자를 추가해주면 된다.
List<String> keySet = new ArrayList<>(map.keySet());
Collections.sort(keySet); //내림차순
//Collections.sort(keySet, Collections.reverseOrder()); //오름차순
key로 정렬하는 것과 마찬가지로 keySet을 이용한다.
keySet.sort() 함수를 사용하되, comparator를 사용하여 정렬한다.
List<String> keySet = new ArrayList<>(map.keySet());
keySet.sort(new Comparator<String>() {
@Override //오름차순
public int compare(String o1, String o2) {
return map.get(o1).compareTo(map.get(o2));
}
});
keySet.sort(new Comparator<String>() {
@Override //내림차순
public int compare(String o1, String o2) {
return map.get(o2).compareTo(map.get(o1));
}
});
comparator는 람다 표현식으로 아래와 같이 간단히 표현할 수도 있다.
keySet.sort((o1, o2) -> map.get(o1).compareTo(map.get(o2)));
keySet.sort((o1, o2) -> map.get(o2).compareTo(map.get(o1)));
Map.Entry에 있는 comparingByValue를 이용해 정렬할 수 있다. (오름차순)
List<Map.Entry<String, Intger>> entryList = new LinkedList<>(map.entrySet());
entryList.sort(Map.Entry.comparingByValue());
for(Map.Entry<String, Integer> entry : entryList) {
System.out.println("key : " + entry.getKey());
System.out.println("value : " + entry.getValue());
}
Ref.
https://velog.io/@dev-easy/Java-Map을-Key-Value로-정렬하기
https://yoonnyoon.tistory.com/131