본문 바로가기
Java

[Java] HashMap이 아닌 LinkedHashMap을 사용하는 이유

by bkuk 2023. 3. 3.

LinkedHashMap이란 순서를 유지하는 해시맵이다.

LinkedHashMap은 Java에서 HashMap을 확장한 클래스이다. LinkedHashMap의 가장 큰 특징은 자료가 입력된 순서를 기억한다는 것이다. 그렇다면, Java의 ArrayList, LinkedList와 같은 자료구조는 순서를 유지하는데 왜 LinkedHashMap이라는 특별히 HashMap의 순서를 유지하기 위한 자료구조로 소개되는 것일까? 우선, HashMap이 입력된 데이터의 순서를 유지하지 않는지 먼저 알아봐야한다.

 

HashMap은 데이터의 순서를 유지하지 않는다.

HashMap이 순서를 보장하지 않는 이유를 알기위해선 HashMap이 등장하게 된 목적부터 알아야한다. HashMap은 연관 배열을 저장하기 위한 자료구조이다. 여기선 연관 배열(Associative Array)은 키와 값의 쌍을 저장하기 위한 구조이다. 키를 통해 쉽게 값을 저장하거나 얻기 위한 목적이다.

연관 배열은 맵(Map) 혹은 딕셔너리(Dictionary)라는 이름으로 불린다. 연관 배열의 자료를 효율적으로 저장하기 위해서 키를 해시 펑션(Hash Function)을 통해 변환한다. 기본적으로 해시 펑션을 통해 나온 해쉬 값을 가지는 버킷에 데이터를 저장한다.

해시 값은 순서를 보장하지 않기 때문에, 해쉬 펑션에 따라서 어느 인덱스에 들어갈지 정확히 알 수 없다. 

 

LinkedHashMap을 통한 순서 유지

이때, LinkedHashMap을 사용하면 된다. LinkedHashMap은 HashMap을 확장한다. HashMap의 모든 기능을 사용하되, Doubly-Linked List를 내부에 유지함으로써 입력된 자료의 순서를 보관한다. 물론, 자료의 크기가 커지면서 메모리 사용량이 늘어나겠지만, 순서를 간편하게 유지하는데 유용하게 사용될 수 있다.

댓글