Java

[Java] LinkedHashMap과 HashMap의 차이

bornsoon 2025. 5. 1. 17:29

HashMap

  • 저장 순서: 보장하지 않음
    → 삽입한 순서와 무관하게 키들의 순서가 매번 바뀔 수 있음.
  • 성능: 매우 빠름 (평균 O(1) 조회/삽입/삭제)
  • null 허용: 키에 하나, 값에 여러 개 null 허용
  • 용도: 순서가 중요하지 않은 일반적인 키-값 저장
Map<String, Integer> map = new HashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("cherry", 3);

for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}
// 출력 순서 예: banana, cherry, apple (불규칙)

LinkedHashMap

  • 저장 순서: 삽입 순서 또는 접근 순서 유지 가능
    • 기본은 삽입 순서 유지
    • 생성 시 accessOrder=true 로 하면 최근 접근 순서로 정렬
  • 성능: HashMap보다 약간 느리지만 대부분 무시할 수 있을 정도
  • null 허용: 동일하게 허용
  • 용도:
    • 순서가 중요한 경우
    • 캐시 (accessOrder=true로 LRU 캐시 구현 가능)
Map<String, Integer> map = new LinkedHashMap<>();
map.put("apple", 1);
map.put("banana", 2);
map.put("cherry", 3);

for (Map.Entry<String, Integer> entry : linkedHashMap.entrySet()) {
    System.out.println(entry.getKey() + " = " + entry.getValue());
}
// 출력 순서: apple, banana, cherry (삽입 순서 유지)

🔁 비교 요약표

항목HashMapLinkedHashMap
순서 유지 ❌ 불가 ✅ 가능 (삽입 또는 접근 순서)
성능 🔼 빠름 🔽 약간 느림
메모리 사용 적음 약간 더 많음 (순서 저장 위한 포인터)
LRU 캐시 구현 ❌ 불편 ✅ 쉬움 (accessOrder=true)
 

🔍 결론

  • 순서가 중요 없다면: HashMap 사용
  • 순서 유지가 필요하다면: LinkedHashMap 사용
  • 간단한 LRU 캐시 구현: LinkedHashMap + accessOrder=true
728x90