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