Map 인터페이스는 키(key)와 값(value)으로 구성된 객체를 저장하는 구조를 가지고 있다. 구성된 객체를 Entry 객체라고 하는데, 이 객체는 키와 값을 각각 Key 객체와 Value 객체로 저장한다.
Map에서 key와 value는 모두 객체이며, 기본타입일 수 없다. 또한, key가 다르면 value가 같아도 다른 entry로 간주한다.
여기서 모든 키는 고유한 값을 가진다. 따라서 키는 중복 저장될 수 없지만, 값은 중복 저장이 가능하다. 이는 키의 역할이 값을 식별하는 것이기 때문이다.
Map 인터페이스를 구현한 클래스에는 HashMap, HashTable, TreeMap, SortedMap 등이 있고 HashMap은 가장 대표적인 클래스이다.
HashMap
HashMap
- Map 인터페이스를 구현한 대표적인 Map 컬렉션이며, Map 인터페이스를 상속하고 있으므로 Map의 특성을 그대로 가지고 있다.
- 이름 그대로 해싱(hashing)을 사용하기 때문에 많은 양의 데이터를 검색하는 데 뛰어난 성능을 보인다.
- 내부에 '키'와 '값'을 저장하는 자료 구조를 가지고 있고 해시 함수를 통해 '키'와 '값'이 저장되는 위치를 결정하므로, 사용자는 그 위치를 알 수 없고 삽입되는 순서와 들어 있는 위치 또한 관계가 없다.
HashMap의 개별 요소가 되는 Entry 객체는 Map 인터페이스의 내부 인터페이스인 Entry 인터페이스를 구현하며, Map.Entry 인터페이스에는 다음과 같은 메서드가 정의되어져 있다.
리턴 타입 | 메서드 | 설명 |
boolean | equals(Object o) | 동일한 Entry 객체인지 비교 |
Object | getKey() | Entry 객체의 Key 객체를 반환 |
Object | getValue() | Entry 객체의 Value 객체를 반환 |
int | hashCode() | Entry 객체의 해시코드를 반환 |
Object | setValue(Object value) | Entry 객체의 Value 객체를 인자로 전달한 value 객체로 바꿈 |
HashMap을 생성할 때는 아래와 같이 키와 값의 타입을 따로 지정해줘야 한다.
HashMap<String, Integer> hashmap = new HashMap<>();
Map은 키와 값을 쌍으로 저장하기 때문에 iterator()를 직접 호출할 수 없다. 대신에 keySet()이나 entrySet() 메서드를 이용해서 Set 형태로 반환된 컬렉션에 iterator()를 호출하여 반복자를 만든 후에 반복자를 통해 순회할 수 있다.
'개발 일지 > Java' 카테고리의 다른 글
[Java] 애너테이션(Annotation) (0) | 2023.01.06 |
---|---|
[Java] 반복자(Iterator) (0) | 2023.01.04 |
[Java] Set<E> (0) | 2023.01.04 |
[Java] List<E> (0) | 2023.01.04 |
[Java] 컬렉션 프레임워크(Collection Framework) (0) | 2023.01.04 |