Java Collection Framework - Collection interface - Map

안녕하세요.

 

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

 

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

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

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

 

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

etc-image-0

 

etc-image-1

 

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

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

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

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

 

etc-image-2

 

 

그럼 HashMap부터 알아볼까요? 

 

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

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

 

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

 

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

 

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

etc-image-3
etc-image-4
etc-image-5

 

다음은 LinkedHashMap입니다. 

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

 

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

 

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

etc-image-6
etc-image-7

 

마지막으로 TreeMap 입니다. 

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

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

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

 

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

etc-image-8

 

 

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

etc-image-9