- 키(key)와 값(value)으로 구성된 Entry 객체를 저장하는 구조를 가지고 있다.
- 키(key)와 값(value) 모두 객체이다.
- 키(key)는 중복 저장을 허용하지 않고
- 값(value)은 중복 저장이 가능하다.
| 리턴 타입 | 메소드 | 설명 |
|---|
| V | put(K key, V value) | 주어진 키와 값을 추가, 저장이 되면 값을 리턴한다. |
| boolean | containsKey(Object key) | 주어진 키가 있는지 확인하여 결과 리턴한다. |
| boolean | containsValue(Object value) | 주어진 값이 있는지 확인하여 결과 리턴한다. |
| Set<Map.Entry<K,V>> | entrySet() | 키와 값의 쌍으로 구성된 모든 Map.Entry 객체를 set에 담아서 리턴한다. |
| V | get(Object key) | 주어진 키의 값을 리턴한다. |
| boolean | isEmpty() | 컬렉션이 비어있는지 조사한다. |
| Set | keySet() | 모든 키를 Set 객체에 담아서 리턴한다. |
| int | size() | 저장된 키의 수를 리턴한다. |
| Collection | values() | 저장된 모든 값을 Collection에 담아서 리턴한다. |
| void | clear() | 모든 Map.Entry를 삭제한다. |
| V | remove(Object key) | 주어진 키와 일치하는 Map.Entry 삭제, 삭제가 되면 값을 리턴한다. |
HashMap
- Map 인터페이스의 구현 클래스이다.
- 키로 사용할 객체는 hashCode()와 equals() 메소드를 재정의해야 한다.
- 대부분의 경우에 키값은 hashCode()와 equals()가 재정의된 String을 주로 사용한다.
- put() 메소드는 entry 객체를 저장하는 메소드이다
- get() 메소드는 key에 해당하는 value를 얻어오는 메소드이다
- remove() 메소드는 key에 해당하는 entry 객체를 삭제하는 메소드이다
- clear() 메소드는 모든 entry 객체를 삭제하는 메소드이다.
- map은 인덱스의 개념이 없어서 반복문 사용 불가
- Map은 Iterable 인터페이스를 구현하지 않아서 향상된 for문을 사용할 수 없다.
- List와 Map 구조가 달라서 ArrayList에 담아서 사용할 수 없다
Set<String> set = map.keySet();
for (String key : set){
System.out.printf("key : %s, value : %s\n", key, map.get(key));
}
set.forEach(key -> System.out.printf("key : %s, value : %s\n", key, map.get(key)));
Set<Map.Entry<String, Snack>> entrySet = map.entrySet();
for(Map.Entry<String, Snack> entry : entrySet){
System.out.printf("key : %s, value : %s\n",entry.getKey(),entry.getValue());
}
HashTable
- Map 인터페이스의 구현 클래스이다.
- HashMap과 차이점은 동기화(Synchronized)를 제공한다.
- 멀티 스레드 환경에서 안전하게 객체를 추가, 삭제할 수 있는 것을 스레드가 안전(Thread Safe)하다고 한다.