Chapter01/Java

[ Java ] TreeMap vs Stream

EmmaDev_v 2025. 9. 2. 11:04

 

 

TreeMap이랑 Stream은 어떨 때 쓰면 좋을까

비슷한 상황에서 각각 예시를 보자

 

 

TreeMap<String, Integer> sortedMap = new TreeMap<>(totalMap);
int[] result = new int[sortedMap.size()];
int idx = 0;

for (String car : sortedMap.keySet()) {
    int totalTime = sortedMap.get(car);
    int baseTime = fees[0], baseFee = fees[1], unitTime = fees[2], unitFee = fees[3];

    if (totalTime <= baseTime) {
        result[idx++] = baseFee;
    } else {
        int extraTime = totalTime - baseTime;
        int extraFee = (int) Math.ceil((double) extraTime / unitTime) * unitFee;
        result[idx++] = baseFee + extraFee;
    }
}

 

 

 

 

return totalMap.entrySet().stream()
        .sorted(Map.Entry.comparingByKey()) 
        .mapToInt(e -> {
            int totalTime = e.getValue();
            int baseTime = fees[0], baseFee = fees[1], unitTime = fees[2], unitFee = fees[3];

            if (totalTime <= baseTime) return baseFee;
            int extraTime = totalTime - baseTime;
            return baseFee + (int) Math.ceil((double) extraTime / unitTime) * unitFee;
        })
        .toArray();

 

 

 

 

TreeMap이 더 좋은 상황

  1. 데이터를 여러 번 정렬 순서대로 다뤄야 할 때
    • 예: 계속 put/get 하면서, 항상 정렬된 상태 유지가 필요한 경우.
    • TreeMap은 삽입될 때마다 자동으로 정렬되므로 별도 정렬 불필요.
  2. 중간에 가장 작은 값, 가장 큰 값 자주 꺼낼 때
    • firstKey(), lastKey() 같은 메서드가 있음.
    • 예:
      • 주식 호가창 관리 (최저가/최고가 조회)
      • 순번표 시스템 (가장 앞 번호, 가장 뒤 번호 관리)
  3. 데이터 추가/삭제가 계속 일어나면서 정렬 상태가 유지되어야 하는 경우
    • 로그 타임라인 관리, 캐시 관리(시간 순서), 스케줄러 구현

 

Stream이 더 좋은 상황

  1. 한 번 정렬해서 결과만 필요할 때
    • Map 자체를 정렬 상태로 계속 유지할 필요 없고,
      결과만 배열이나 리스트로 뽑으면 끝나는 경우.
    • → 코딩테스트 대부분은 이 케이스 (주차 요금 계산도 사실 이쪽).
  2. 데이터 변환/가공까지 한 번에 하고 싶을 때
    • stream().sorted().map(...).filter(...).toArray() →
      정렬 + 가공 + 변환을 체이닝으로 처리 가능.
    • 예:
      • 매출 리스트에서 고객ID 오름차순 정렬 후 매출 합계만 배열로
      • 로그에서 시간 순 정렬 후 에러 코드만 추출
  3. 코드 가독성과 간결성이 중요한 경우
    • 실무 리뷰, Java 8+ 함수형 패러다임 권장 환경
    • 유지보수성, 재사용성 고려

 

 

 

 

TreeMap = "데이터 구조 자체가 정렬된 상태로 유지돼야 한다"

Stream = "정렬은 한 번만 하고, 그 결과만 쓰면 된다"

 

 

 

 

 

 

 

 

 

기준TreeMap 방식Stream 방식

정렬 방법 TreeMap 생성 시 자동 정렬 .sorted(Map.Entry.comparingByKey())
추가 자료구조 TreeMap 새로 생성 필요 Stream 내부에서 정렬 후 바로 처리
코드 가독성 명시적이고 직관적 (for문) 함수형 스타일, 짧고 깔끔
성능 O(n log n) (Map 재생성) O(n log n) (Stream 정렬) → 큰 차이 없음
추천 상황 코딩테스트, 초보자 가독성 실무, 함수형 코드 선호, Java 8+ 면접용

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형

'Chapter01 > Java' 카테고리의 다른 글

[ Java ] TreeMap  (1) 2025.09.01
[Java] Stack / Queue 사용예시  (2) 2025.03.07
[ Java ] 이중해시맵 + 예시코드  (0) 2024.06.17
[ java ] Stream_예시코드  (0) 2024.05.28
[ java ] 객체지향 개발 SOLID 5대 원리 + 예시코드  (1) 2024.03.13