[TIL] HashMap의 초기 크기 설정

2025-02-26 TIL

📝 TIL (Today I Learned)
🔗 원본 이슈: #20
📅 작성일: 2025-02-26
🔄 최종 수정: 2025년 03월 05일


🍀 새롭게 배운 것

  • HashMap의 초기 크기 설정(new HashMap<>(N))이 성능 최적화에 중요한 영향을 미친다.
  • 불필요한 리사이징을 방지하면 메모리 사용량과 실행 시간을 줄일 수 있다./
  • getOrDefault()를 사용하면 containsKey() + get()을 따로 호출할 필요가 없어 코드가 간결해진다.

🍎 오늘의 문제 상황

  • 백준 “숫자 카드 2” 문제를 해결하는 과정에서, 첫 번째 개선 코드(2번째 코드)를 제출했더니 실행 시간은 늘어났지만 메모리는 줄어드는 현상이 발생했다.

    Image

    • 원인 분석
      • 2번째 코드에서는 HashMap<Integer, Integer> hashMap = new HashMap<>();을 사용하여 기본 크기(16)에서 시작했음.
      • 데이터 개수 N이 클 경우, HashMap이 자동으로 리사이징(재할당)되면서 성능 저하 발생.
      • 3번째 코드에서 new HashMap<>(N)을 사용하여 초기 크기를 설정함으로써, 불필요한 리사이징을 방지하고 성능을 최적화할 수 있었다.
    • ✅ 해결 과정
      • HashMap<Integer, Integer> hashMap = new HashMap<>(N);
      • N을 초기 크기로 설정하면 초기 배열 크기가 충분히 커서 리사이징이 발생하지 않음.
      • 메모리 사용량은 줄어들고, 실행 속도는 향상됨.

🦄 느낀 점

  • 데이터 개수가 클 때, HashMap의 초기 크기를 설정하는 것이 중요하다.
  • 메모리 최적화뿐만 아니라 실행 시간도 개선될 수 있다.
  • 단순한 코드 변경 하나가 큰 성능 차이를 만들 수 있으므로, 성능 튜닝을 할 때는 실행 시간과 메모리 사용량을 모두 확인하는 습관이 필요하다.

🐬 참고 자료