Java & Spring

[Java] Map 정렬

nippycloud 2026. 3. 3. 09:20

Map에서 Key 정렬은 TreeMap을 사용하면 된다.

 

Map<Integer, String> map = new TreeMap<>();
map.put(3, "kim");
map.put(1, "lee");
map.put(2, "choi");

// key가 1, 2, 3으로 자동 정렬된다.

 

내림차순 정렬 시 Collections.reverseOrder()을 넣으면 된다.

Map<Integer, String> map = new TreeMap<>(Collections.reverseOrder());
map.put(3, "kim");
map.put(1, "lee");
map.put(2, "choi");

// key가 3, 2, 1 순서로 자동 정렬된다.

 

TreeMap에서 자주 사용되는 메서드

TreeMap<Integer, String> map = new TreeMap<>();
map.put(1, "Data1");
map.put(2, "Data2");
map.put(3, "Data3");
map.put(4, "Data4");
map.put(5, "Data5");

map.firstKey() : 가장 작은 키(1) 반환

map.lastKey() : 가장 큰 키(5) 반환

map.higherKey(2) : 2보다 큰 최소 키(3) 반환

map.lowerKey(2) : 2보다 작은 최대 키(1) 반환

map.subMap(2, 4); // 2, 3만 포함된 Map 반환
map.headMap(3);    // 1, 2만 포함된 Map 반환
map.tailMap(3);    // 3, 4, 5가 포함된 Map 반환

 

 

 

Map에서 Value 정렬은 TreeMap으로 불가능하기 때문에 Stream API를 사용해야 한다.

 

Map<String, Integer> map = new HashMap<>();
map.put("A", 50);
map.put("B", 10);
map.put("C", 30);

 

 

 

1. 스트림을 사용하여 값 기준 오름차순 정렬 후 출력

map.entrySet().stream()
    .sorted(Map.Entry.comparingByValue())
    .forEach(entry -> System.out.println(entry.getKey() + " : " + entry.getValue()));

 

 

 

2. 만약 정렬된 결과를 다시 Map에 담고 싶을 경우 LinkedHashMap으로 해결한다.

LinkedHashMap<String, Integer> sortedMap = 
    map.entrySet()
    .stream()
    .sorted(Map.Entry.comparingByValue())
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        Map.Entry::getValue,
        (e1, e2) -> e1,
        LinkedHashMap::new // 순서 유지를 위해 반드시 필요
    ));

'Java & Spring' 카테고리의 다른 글

QueryDSL  (0) 2026.04.30
[Spring] JPA 6  (0) 2026.03.16
[Spring] ResponseEntity  (0) 2026.02.22
[Servlet] WebSocket  (0) 2026.02.16
[Spring] Security  (0) 2026.02.15