Collection 인터페이스와는 다른 저장 방식을 가진다. (key, value) 쌍으로 구성된 Map.Entry라는 객체들을 저장하는 구조이다. 제네릭이어서 key와 value는 모두 객체이다.
구현한 클래스로는 HashMap, Hashtable, TreeMap이 있다.
메서드 | 설명 |
---|---|
V put(K key, V value) | 주어진 key와 value를 추가, 저장이 되면 value를 반환 |
V remove(Object key) | 주어진 key와 일치하는 Map.Entry를 삭제 삭제되면 해당 Map.Entry의 value를 반환 |
void clear() | 모든 Map.Entry 객체를 삭제 |
메서드 | 설명 |
---|---|
boolean containsKey(Object key) | 주어진 key가 있는지 |
boolean containsValue(Object value) | 주어진 value가 있는지 |
Set<Map.Entry<K, V>> entrySet() | 모든 Map.Entry 객체들을 Set에 담아서 반환 |
V get(Object key) | 주어진 key에 해당하는 value를 반환 |
boolean isEmpty() | 컬렉션이 비어 있는지 여부 |
Set<K> keySet() | 모든 key를 Set에 담아서 반환 |
int size() | 저장된 key 개수를 반환 |
Collection<V> values() | 모든 value를 Collection에 담아서 반환 |
해시 알고리즘을 사용하여 검색 속도가 빠르다. Map 인터페이스를 구현하기 때문에, 중복된 키는 허용되지 않으며, 같은 값을 다른 key로 저장할 수는 있다.
HashMap<String, Integer> hm = new HashMap<String, Integer>();
// put() 메소드를 이용한 요소의 저장
hm.put("삼십", 30);
hm.put("십", 10);
hm.put("사십", 40);
hm.put("이십", 20);
// Enhanced for 문과 get() 메소드를 이용한 요소의 출력
System.out.println("맵에 저장된 키들의 집합 : " + hm.keySet());
for (String key : hm.keySet()) {
System.out.println(String.format("키: %s, 값: %s", key, hm.get(key)));
}
// remove() 메소드를 이용한 요소의 제거
hm.remove("사십");
// iterator() 메소드와 get() 메소드를 이용한 요소의 출력
Iterator<String> keys = hm.keySet().iterator();
while (keys.hasNext()) {
String key = keys.next();
System.out.println(String.format("키: %s, 값: %s", key, hm.get(key)));
}
// replace() 메소드를 이용한 요소의 수정
hm.replace("이십", 200);
for (String key : hm.keySet()) {
System.out.println(String.format("키: %s, 값: %s", key, hm.get(key)));
}
// size() 메소드를 이용한 요소의 총 개수
System.out.println("맵의 크기 : " + hm.size());
HashMap과 같은 동작을 하는 클래스로, 사용할 수 있는 메서드가 거의 같다. 기존 코드와의 호환성을 위해서만 남아 있으므로, HashMap을 대신 사용하는 것이 좋다.
Hashtable의 메서드는 동기화 메서드이기 때문에 복수의 스레드가 동시에 접근하더라도 추가, 삭제 등을 안전하게 수행할 수 있다.(Vector와 비슷)
JDK 1.2부터 제공된 클래스로, key-value 데이터를 Binary Search Tree 형태로 저장하기 때문에 추가, 제거 등의 동작 시간이 매우 빠르다.
NavigableMap 인터페이스를 Red-Black Tree로 구현한다.
Map 인터페이스를 구현하였기 때문에 중복된 키는 허용하지 않고, 중복된 값은 가능하다.
http://tcpschool.com/java/java_collectionFramework_map 참조
TreeMap<Integer, String> tm = new TreeMap<Integer, String>();
// put() 메소드를 이용한 요소의 저장
tm.put(30, "삼십");
tm.put(10, "십");
tm.put(40, "사십");
tm.put(20, "이십");
// Enhanced for 문과 get() 메소드를 이용한 요소의 출력
System.out.println("맵에 저장된 키들의 집합 : " + tm.keySet());
for (Integer key : tm.keySet()) {
System.out.println(String.format("키: %s, 값: %s", key, tm.get(key)));
}
// remove() 메소드를 이용한 요소의 제거
tm.remove(40);
// iterator() 메소드와 get() 메소드를 이용한 요소의 출력
Iterator<Integer> keys = tm.keySet().iterator();
while (keys.hasNext()) {
Integer key = keys.next();
System.out.println(String.format("키: %s, 값: %s", key, tm.get(key)));
}
// replace() 메소드를 이용한 요소의 수정
tm.replace(20, "twenty");
for (Integer key : tm.keySet()) {
System.out.println(String.format("키: %s, 값: %s", key, tm.get(key)));
}
// size() 메소드를 이용한 요소의 총 개수
System.out.println("맵의 크기 : " + tm.size());