해시맵 (HashMap)
HashMap은 Map 인터페이스를 구현한 대표적인 클래스이다. HashMap은 키와 값으로 구성된 객체를 저장하는데, 이 객체를 Entry 객체라 한다.
HashMap은 해시 함수를 통해 키와 값이 저장되는 위치를 결정한다. 사용자는 그 위치를 알 수 없고, 삽입되는 순서와 위치 또한 관계가 없다.
해시 함수를 통해 데이터를 관리하는 자료 구조로 많은 양의 데이터를 검색하는 데 있어서 뛰어난 성능을 보인다.
HashMap의 개별 요소가 되는 Entry 객체는 Map 인터페이스의 내부 인터페이스인 Entry 인터페이스를 구현한다. 따라서 Map.Entry 인터페이스에는 다양한 메서드가 정의되어 있다.
equals(Object o)
동일한 Entry 객체인지 비교하는 메서드로 동일하면 true, 그렇지 않으면 false를 반환한다.
getKey()
Entry 객체의 Key 객체를 반환한다.
getValue()
Entry 객체의 Value 객체를 반환한다.
hashCode()
Entry 객체의 해시 코드를 반환한다. 반환 타입은 int형이다.
setValue(Object value)
Entry 객체의 Value 객체를 인자로 전달한 value 객체로 바꾼다.
HashMap을 생성할 때, 타입 파라미터에는 키와 값의 타입을 따로 지정해 주어야 한다.
HashMap<String, Integer> hashMap = new HashMap<>();
다음은 메서드를 활용하여 동작하는 예제이다.
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class HashMapEx {
public static void main(String[] args) {
// HashMap 생성
HashMap<String, Integer> hashMap = new HashMap<>();
// Entry 객체 저장
hashMap.put("부산", 1);
hashMap.put("인천", 2);
hashMap.put("대구", 3);
hashMap.put("대전", 4);
hashMap.put("광주", 5);
hashMap.put("울산", 6);
// 저장된 총 Entry 수 얻기
int size = hashMap.size();
System.out.println(size);
// 객체 찾기
Object object = hashMap.get("부산");
System.out.println(object);
// key를 요소로 가지는 Set 생성
Set<String> keySet = hashMap.keySet();
System.out.println(keySet);
// value 값 읽기
Iterator<String> keyIterator = keySet.iterator();
while (keyIterator.hasNext()) {
String key = keyIterator.next();
Integer value = hashMap.get(key);
System.out.println("키 : " + key + " 값 : " + value);
}
// 객체 삭제 후 크기 출력
hashMap.remove("부산");
System.out.println(hashMap.size());
// Entry 객체를 요소로 가지는 Set을 생성
Set<Map.Entry<String, Integer>> entrySet = hashMap.entrySet();
// entrySet을 순회하면서 value 값 읽기
Iterator<Map.Entry<String, Integer>> entryIterator = entrySet.iterator();
while (entryIterator.hasNext()) {
Map.Entry<String, Integer> entry = entryIterator.next();
String key = entry.getKey(); // Map.Entry 인터페이스의 메서드
Integer value = entry.getValue(); // Map.Entry 인터페이스의 메서드
System.out.println("키 : " + key + " 값 : " + value);
}
// 전체 객체 삭제
hashMap.clear();
}
}
HashMap 사용 시 주의할 점
Map은 키와 값을 쌍으로 저장하기 때문에 iterator() 메서드를 직접 호출할 수 없다.
따라서 keySet() 메서드 또는 entrySet() 메서드를 이용하여 Set 형태로 반환된 컬렉션에 iterator() 메서드를 호출하여 Iterator를 생성해야 한다.
또한, 값에 대하여 Set() 메서드를 지원하지 않는다. 이러한 이유는 값은 중복이 허용되기 때문이다. Set은 중복을 허용하지 않는 집합이다.
entrySet의 경우, Iterator 타입 매개변수에 Map.Entry 객체 타입으로 받아야 한다. 따라서 중첩 <>을 사용하여 생성해야 한다
Iterator<Map.Entry<String, Integer>> entrySet = hashMap.entrySet();
이 외의 HashMap의 메서드들의 정보는 공식 문서에서 확인이 가능하다.
https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
'언어(Language) > Java' 카테고리의 다른 글
[Java] 자바 TreeMap 개념 정리 및 활용 (1) | 2022.09.23 |
---|---|
[Java] 자바 HashTable 개념 정리 및 활용 (1) | 2022.09.23 |
[Java] 자바 Map<K, V> 인터페이스 개념 정리 (1) | 2022.09.23 |
[Java] 자바 TreeSet 개념 정리 및 활용 (0) | 2022.09.22 |
[Java] 자바 HashSet 개념 정리 및 활용 (0) | 2022.09.22 |