Java
Map 컬렉션, HashMap 사용하기
wo_ogie
2021. 12. 14. 19:27
Map Collection
Map 컬렉션은 key와 value로 구성된 Map.Entry 객체를 저장하는 구조를 가지고 있다.
- Entry는 Map 인터페이스 내부에 선언된 중첩 인터페이스이다.
- key와 value는 모두 객체이다.
- key는 중복 저장될 수 없지만 value는 중복 저장될 수 있다. 만약 기존에 저장된 key와 동일한 key로 value를 저장하면 기존의 value는 없어지고 새로운 value로 대체된다.
Map Interface의 Method
다음은 Map 컬렉션에서 공통적으로 사용 가능한 Map 인터페이스의 메소드 목록이다. K는 key의 type을, V는 value의 type을 의미한다.
기능 | 메소드 | 설명 |
객체 추가 | V put(K key, V value) | 주어진 key로 value를 저장합니다. 새로운 key일 경우 null을 리턴하고, 동일한 key가 있을 경우 새로운 value로 대체하고 이전 value를 삭제합니다. |
객체 검색 | boolean containsKey(Object key) | 주어진 key가 있는지를 확인합니다. |
boolean containsValue(Obejct value) | 주어진 value가 있는지를 확인합니다. | |
V get(Object key) | 주어진 key에 해당하는 value를 리턴합니다. | |
V getOrDefault(Object key, V defaultValue) | 주어진 key에 해당하는 value를 리턴합니다. value가 존재하지 않는다면 defaultValue를 리턴합니다. | |
boolean isEmpty() | 컬렉션이 비어있는지를 확인합니다. | |
int size() | 저장된 key의 총 개수를 리턴합니다. | |
Set<K> keySet() | 모든 key를 Set 객체에 담아서 리턴합니다. | |
Set<Map.Entry<K, V>> entrySet() | key와 value의 쌍으로 구성된 모든 Map.Entry 객체를 Set에 담아서 리턴합니다. | |
Collection<V> values() | 저장된 모든 value를 Collection에 담아서 리턴합니다. | |
객체 삭제 | void clear() | 모든 Map.Entry(key와 value)를 삭제합니다. |
V remove(Object key) | 주어진 key와 일치하는 Map Entry를 삭제하고 value를 리턴합니다. |
Map 컬렉션 사용 예시
Map<String, Integer> map = ···;
map.put("JaeUk", 30); // 객체 추가
int score = map.get("JaeUk"); // 객체 찾기
map.remove("JaeUk"); // 객체 삭제
저장된 전체 객체를 대상으로 순회하기
저장된 전체 객체를 대상으로 하나씩 얻고 싶을 경우에는 두 가지 방법을 사용할 수 있다.
1. keySet()
메소드 사용
keySet()
메소드로 모든 key를 Set 컬렉션으로 얻은 다음, iterator를 통해 key를 하나씩 얻고 get()
메소드를 통해 value 수 있다.
Map<K, V> map = ···;
Set<K> KeySet = map.KeySet();
Iterator<K> keyIterator = keySet.iterator();
while (keyIterator.hasNext()) {
K key = keyIterator.next();
V value = map.get(key);
}
2. entrySet()
메소드 사용
entrySet()
메소드로 모든 Map.Entry를 Set 컬렉션으로 얻은 다음, iterator를 통해 Map.Entry를 하나씩 얻고 getKey()
와 getValue()
메소드를 이용해 key와 value를 얻을 수 있다.
Map<K, V> map = ···;
Set<Map.Entry<K, V>> entrySet = map.entrySet();
Iterator<Map.Entry<K, V>> entryIterator = entrySet.iterator();
while (entryIterator.hasNext()) {
Map.Entry<K, V> entry = entryIterator.next();
K key = entry.getKey();
V value = entry.getValue();
}
참고자료
- 신용권, 『혼자 공부하는 자바』, 한빛미디어(2019)