개발 일지/Java

[Java] Map<K, V>

미숫가루설탕많이 2023. 1. 4. 19:37

 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