Map Collection에 대해서

2019-09-11

Map이란?

Map 인터페이스는 Collection 인터페이스와는 다른 저장 방식을 가진다.

Map 컬렉션에는 키(key)와 값(value)으로 구성된 하나의 쌍으로 저장하는 방식을 사용한다. 여기서 키란 실질적인 값을 찾기 위한 이름이다.

키는 중복 저장이 불가능하지만 값은 중복 저장이 가능하다. 만약 중복 저장 시 먼저 저장된 값은 저장되지 않은 상태가 된다. 즉, 기존 값은 없어지고 새로운 값으로 대체되는 것이다. 또한 Set과 마찬가지로 순서 상관없이 저장된다.

대표적인 클래스는 다음과 같다.

  1. HashMap<K, V>
  2. Hashtable<K, V>
  3. TreeMap<K, V>

HashSet에서처럼, 프로그래머는 HashMap과 HashTable 모두 키로 사용할 객체에 대해 hashCode()와 equals() 메소드를 오버라이딩하여 같은 객체가 될 조건을 정의할 수 있다.


HashMap<K, V> 클래스

Map<String, Integer> hm = new HashMap<String, Integer>();

HashMap 클래스는 Map 컬렉션 클래스에서 가장 많이 사용되는 클래스 중 하나이다. JDK 1.2부터 제공된 HashMap 클래스는 해시 알고리즘(hash algorithm)을 사용하여 검색 속도가 매우 빠르다.

HashTable과 다르게 HashMap은 키와 값으로 null값이 허용된다.


HashTable<K, V> 클래스

HashMap 클래스와 유사하다. Map 인터페이스를 상속받고, HashMap 클래스에서 사용할 수 있는 메소드와 거의 같다.

차이점이라면 HashTable은 동기화(synchronize) 처리를하고 HashMap은 그렇지 않다는 것이다.

Hashtable 의 모든 Data 변경 매소드는 syncronized 로 선언되어있다. 즉 매소드 호출 전 쓰레드간 동기화 락을 통해 멀티 쓰레드 환경에서 data의 무결성을 보장해준다.

단, 동기화 락이 매우 느리기 때문에 HashMap이 훨씬 빠르다.

동기화가 필요 없다면 HashMap을, 동기화 보장이 필요하다면 Hashtable을 사용하면된다.

하지만 현재는 기존 코드와 호환성을 위해 남아 있고, 동기화 처리가 필요할 때 Collection.synchronizedMap을 사용하는 것이 성능적으로 더 좋다고 한다.


TreeMap<K, V> 클래스

TreeMap<Integer, String> tm = new TreeMap<Integer, String>();

TreeMap 클래스는 키와 값을 한 쌍으로 하는 데이터를 이진 검색 트리(binary search tree)의 형태로 저장한다.

이진 검색 트리는 데이터를 추가하거나 제거하는 등의 기본 동작 시간이 매우 빠르다. (데이터의 key를 기준으로 정렬할 경우 유용)

JDK 1.2부터 제공된 TreeMap 클래스는 NavigableMap 인터페이스를 기존의 이진 검색 트리의 성능을 향상시킨 레드-블랙 트리(Red-Black tree)로 구현한다.


HashMap<K, V> 메소드

HashMap 클래스에서 제공하는 주요 메소드는 다음과 같다.

HashMapMethod


TreeMap<K, V> 메소드

TreeMap 클래스에서 제공하는 주요 메소드는 다음과 같다.

TreeMapMethod1

TreeMapMethod2


출처

https://onsil-thegreenhouse.github.io/programming/java/2018/02/22/java_tutorial_1-24/ https://limkydev.tistory.com/40 https://jeong-pro.tistory.com/87