Java Collection Framework - Collection interface - Map

안녕하세요.

 

오늘은 Java Collection Freamwork의 마지막 자료구조인  Map에 대해 설명드리도록 하겠습니다.

 

Map 자료 구조의 경우와 같은 특징을 가지고 있습니다. 

  • Key와 Value의 쌍으로 데이터를 저장한다.
  • Value의 경우 중복이 허용되지만, Key의 경우 중복을 허용하지 않는다.
  • 중복된 키를 사용하게 되면 기존 값이 삭제 되고 마지막 저장 값을 다시 저장한다. 
  • 저장 순서를 보장하지 않는다.

또한, Map Interface 안에는 HashMap, LinkedHashMap, HashTable, TeeMap 등이 존재하는데요.

 

각각의 특징을 하나 하나 살펴보도록 하겠습니다. 

 

 

Map의 Entry에 대해 먼저 알아보도록 하겠습니다. 

Entry는 Map Interface 안에 있는 내부 인터페이스입니다. 

Map에 저장되는 Key-Value 쌍의 Node 내부 클래스가 이를 구현하고 있다는 특징을 가지고 있습니다. 

Map 자료구조를 보다 객체지향적인 설계를 하도록 유도하기 위함입니다. 

 

 

 

그럼 HashMap부터 알아볼까요? 

 

HashMap 은 기존은 HashTable의 단점을 보완한 컬렉션 입니다. 

배열과 연결이 결합된 Hashing 형태로 Key,Value를 묶어 하나의 데이터로 저장한다는 특징을 가지고 있습니다. 

 

Map의 기본적인 특징을 잘 보여주는 예시로 중복을 허용하지 않으며 순서를 보장하지 않습니다. 

 

Key 및 Value로 Null을 허용한다는 특징도 가지고 있습니다. 

 

다만, 비동기 처리로 동작하기 때문에 멀티 쓰레드 환경에서 적합하지 않습니다. 해당 경우는 다중 쓰레드에서 하나의 자료구조를 참조할 수 있도록 ConcurrentHashMap을 사용하곤 합니다.

 

다음은 LinkedHashMap입니다. 

이전, 포스팅에서 Linked라는 이름이 붙으면 순서를 보장한다고 했던 것 기억하시나요? 

 

해당 자료구조도 동일한 특징을 갖고 있습니다. HashMap의 특징을 가지고 있지만 들어온 순서를 보장한다는 특징을 보여주고 있습니다. 

 

아래와 같이 10,20,50 순으로 넣게 된다면 해당 순서를 기억하여 10, 20,50 이 출력됨을 확인할 수 있습니다. 

 

마지막으로 TreeMap 입니다. 

LinkedHashMap과 유사한 특징을 가지지만 순서를 기억하는 것이 아닌 정렬이 된다는 특징을 갖습니다. 

또한, 이진 검색 트리의 형태로 범위 검색 시 큰 장점을 가지고 있습니다.

다만, 정렬이 지속적으로 이루어지기 때문에 저장 시간의 경우 오래 걸린다는 특징을 가지고 있습니다. 

 

그렇기 때문에 10,20,50,40을 넣더라도 나오는 순서는 -> 10,20,40,50으로 정렬된 것을 확인할 수 있습니다. 

 

 

아래 문제들을 풀며 Map 자료구조에 대해 익혀보시는 것을 권장드립니다.