컬렉션 프레임워크의 마지막 컬렉션 Map
입니다. Map
은 이전에 다룬 List, Set
과는 조금 다른 성격을 지니고 있습니다.
Map
은 키-값(key-value) 쌍
을 통해 데이터를 저장합니다. 키는 중복을 허용하지 않지만, 값은 중복을 허용하고 있습니다. 따라서 중복된 키를 삽입을 하면 기존 데이터를 삭제하고 새로운 데이터를 삽입하게 됩니다. 이 과정에서 순서가 바뀔수도 있습니다.
역시 Map
의 공통적인 메소드들은 이 포스트에서 정리했으므로 클래스에 대해 추가된 메소들과 기본적인 사용법들만 다루겠습니다.
HashMap
은 키-값 쌍을 Object-Object의 형태로 저장합니다. 일반적으로 키는 탐색의 편의성을 위해서 주로 String 타입으로 저장합니다.
HashMap
의 선언은 다음과 같이 선언합니다. 키-값 타입을 타입 파라미터로 받습니다.
HashMap<K, V> 변수명 = new HashMap<K, V>(); //지정된 타입 K, V를 받음
//타입 파라미터를 키는 K, 값은 V로 표기합니다.
HashMap 변수명 = new HashMap(); //모든 타입을 받음
HashMAP
에서 사용가능한 메소드들은 다음과 같습니다.
메소드 | 설명 |
---|---|
void clear() | HashMap의 모든 객체를 삭제 |
Object clone() | 현재 HashMap을 복사해서 반환 |
boolean containsKey(Object key) | HashMap에 일치하는 key가 있는지 여부를 반환 |
boolean containsValue(Object value) | HashMap에 일치하는 value가 있는지 여부를 반환 |
Set entrySet() | HashMap의 키-값 쌍(엔트리)을 객체 형태로 Set에 저장해서 반환 |
Object get(Object key) | 지정된 key의 값을 반환 |
boolean isEmpty() | HashMap이 비었는지 여부를 반환 |
Set keySet() | HashMap의 모든 키가 저장된 Set을 반환 |
Object put(Object key, Object value) | 전달된 key-value를 저장 |
void putAll(Map m) | Map m의 모든 요소를 HashMap에 저장 |
Object remove(Object key) | 지정된 key의 객체 삭제 |
int size() | HashMap의 크기 반환 |
Collection values() | HashMap의 모든 values를 컬렉션으로 반환 |
public class Main {
public static void main(String[] args) {
HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("가", 1);
hm.put("나", 2);
hm.put("다", 3);
hm.put("라", 4);
System.out.println("HashMap의 크기: " + hm.size());
System.out.println("\"다\"의 value: " + hm.get("다"));
}
}
Hashtable
은 동기화를 지원하는 구버전 클래스입니다.
동기화가 필요하지 않은 경우에도 동기화를 수행하여 효율이 낮기 때문에 현재는 동기화와 컬렉션을 따로 수행할 수 있는 HashMap
을 사용합니다.
Properties
는 Hashtable
의 자식 클래스입니다. Hashtable
과 동일한 특성을 가졌고 유일한 차이점은 Properties
는 키-값을 무조건 String
타입으로만 받습니다. 일반적으로 .properties
확장자 파일을 읽을 때 사용합니다.
TreeMap
은 이진 탐색 트리를 기반으로 키-값 상의 데이터를 저장하는 컬렉션입니다. 이진 탐색 트리
의 장점이 정렬과 검색이므로 해당 기능이 필요할 때 사용합니다.
다만 HashMap
도 검색 성능이 상당히 좋은편인데요. 어떤 검색을 하냐에 따라 컬렉션의 선택이 달라집니다. 일반적인 검색에선 대부분 HashMap
이 조금 더 뛰어난 성능을 보여줍니다. TreeMap
은 범위 검색과 정렬을 이용할 때 더 좋은 성능을 보여줍니다. 원하는 프로그램의 기능에 맞춰서 Map을 사용하시면 됩니다.
TreeMap
의 메소드들은 다음과 같습니다.
메소드 | 설명 |
---|---|
void clear() | TreeMap의 모든 객체를 삭제 |
Object clone() | 현재 TreeMap을 복사해서 반환 |
boolean containsKey(Object key) | TreeMap에 일치하는 key가 있는지 여부를 반환 |
boolean containsValue(Object value) | TreeMap에 일치하는 value가 있는지 여부를 반환 |
Set entrySet() | TreeMap의 키-값 쌍(엔트리)을 객체 형태로 Set에 저장해서 반환 |
Object firstKey() | TreeMap의 첫번째 요소의 키를 반환 |
Object get(Object key) | 지정된 key의 값을 반환 |
SortedMap headMap(Object toKey) | 첫번째 요소부터 to이전까지의 요소를 SortedMap으로 반환 |
boolean isEmpty() | TreeMap이 비었는지 여부를 반환 |
Set keySet() | TreeMap의 모든 키가 저장된 Set을 반환 |
Object lastKey() | TreeMap의 마지막 키를 반환 |
Object put(Object key, Object value) | 전달된 key-value를 저장 |
void putAll(Map m) | Map m의 모든 요소를 TreeMap에 저장 |
Object remove(Object key) | 지정된 key의 객체 삭제 |
int size() | HashMap의 크기 반환 |
SortedMap subMap(Object fromKey, Object tokey) | from에서 to 사이의 요소들이 담긴 Map 반환 |
SortedMap tailMap(Object fromKey) | 지정된 from부터 끝까지의 요소들이 담긴 Map 반환 |
Collection values() | TreeMap의 모든 values를 컬렉션으로 반환 |
public class Main {
public static void main(String[] args) {
TreeMap<String, Integer> tm = new TreeMap<String, Integer>();
tm.put("가", 1);
tm.put("나", 2);
tm.put("다", 3);
tm.put("라", 4);
System.out.println("TreeMap의 크기: " + tm.size());
System.out.println("\"다\"의 value: " + tm.get("다"));
}
}