Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

Java HashMap vs LinkedHashMap 핵심 차이점 총정리

Java의 Map 컬렉션을 다루다 보면 HashMapLinkedHashMap 중 어떤 것을 선택해야 할지 고민하게 됩니다. 두 클래스는 모두 Map 인터페이스를 구현하지만, 내부 구조와 데이터 저장 방식, 그리고 성능 특성에서 중요한 차이가 있습니다. 이 글에서는 두 클래스의 차이점을 명확하게 정리해 드립니다.

HashMap이란?

HashMap은 Java에서 가장 널리 사용되는 Map 구현체로, 키(Key)와 값(Value)의 쌍을 해시 기반으로 빠르게 저장하고 조회할 수 있습니다.

  • 데이터의 삽입 순서를 보장하지 않습니다. 요소를 꺼낼 때 순서는 예측할 수 없습니다.
  • 내부적으로 해시 테이블(HashTable) 구조를 사용하여 맵을 저장합니다.
  • AbstractMap 클래스를 상속합니다.
  • Map 인터페이스를 구현합니다.
  • JDK 1.2(Java 2)부터 도입된 오랜 역사를 가진 클래스입니다.
  • 순서를 관리할 필요가 없기 때문에 오버헤드가 상대적으로 낮고 성능이 뛰어납니다.

LinkedHashMap이란?

LinkedHashMap은 HashMap의 기능에 연결 리스트(Linked List)를 결합한 클래스로, 입력된 순서를 유지해야 하는 경우에 유용합니다.

  • 삽입된 순서(insertion order)를 그대로 유지합니다. 반복 시 요소가 입력된 순서대로 반환됩니다.
  • 내부적으로 해시 테이블과 이중 연결 리스트(Doubly Linked List)를 함께 사용하여 맵을 저장합니다.
  • HashMap 클래스를 직접 상속하며, Map 인터페이스를 구현합니다.
  • JDK 1.4(Java 4)부터 도입되었습니다.
  • 순서 정보를 유지하기 위한 추가 작업이 필요하기 때문에 오버헤드가 상대적으로 높습니다.
  • 또한 접근 순서(access-order) 기반 모드를 활용하면 LRU 캐시처럼 활용할 수도 있습니다.

주요 차이점 비교

두 클래스의 차이를 한눈에 비교해 보면 다음과 같습니다.

  • 순서 유지: HashMap은 순서를 보장하지 않지만, LinkedHashMap은 삽입 순서를 보장합니다.
  • 내부 구조: HashMap은 해시 테이블만 사용하고, LinkedHashMap은 해시 테이블 + 연결 리스트를 함께 사용합니다.
  • 상속 관계: HashMap은 AbstractMap을 상속하고, LinkedHashMap은 HashMap을 상속합니다.
  • 도입 시기: HashMap은 JDK 1.2, LinkedHashMap은 JDK 1.4에서 도입되었습니다.
  • 성능: 일반적인 조회·삽입 속도는 HashMap이 더 우수하며, LinkedHashMap은 순서 유지 비용으로 약간 느립니다.

어떤 것을 선택해야 할까?

순서가 전혀 중요하지 않고 최고의 조회 성능이 필요하다면 HashMap이 적합합니다. 반면, 데이터가 입력된 순서대로 출력하거나 순서 기반 로직(예: LRU 캐시 구현)이 필요하다면 LinkedHashMap을 선택하는 것이 좋습니다. 두 클래스의 API 사용법은 거의 동일하기 때문에, 필요에 따라 손쉽게 교체할 수 있다는 점도 장점입니다.