728x90
반응형
1. 해시맵 (HashMap) 이란 무엇일까?
- map 인터페이스를 구현한 대표적인 클래스
- HashMap은 키(Key)와 값(Value) 이 1:1구조로 구성된 객체를 저장하는데, 이 객체를 Entry 객체라고 한다.
- HashMap의 개별 요소가 되는 Entry 객체는 Map 인터페이스의 내부 인터페이스인 Entry 인터페이스를 구현한다.
- HashMap은 해시 함수를 통해 키와 값이 저장되는 위치를 결정한다. 사용자는 그 위치를 알 수 없고, 삽입되는 순서와 위치도 관계가 없다. 해시 함수를 통해 데이터를 관리하는 자료 구조로 많은 양의 데이터를 검핵하는 데 있어서 뛰어난 성능을 보인다.
- 키는 맵에서 유일한 값을 가져야 하고, 값은 중복된 값이어도 상관 없다. 키는 대소문자를 구별한다.
※ 맵 (Map)
- 키와 값을 하나의 쌍으로 저장하여 데이터를 관리하는 자료구조
- 데이터의 순서가 없다.
(1) 주의할 점
- Map은 키와 값을 쌍으로 저장하기 때문에 iterator() 메서드를 직접 호출할 수 없다.
- 따라서, keySet() 메소드 또는 entrySet() 메소드를 이용하여 Set 형태로 변환된 컬렉션에 iterator() 메소드를 호출해야한다.
- 값에 대한 Set() 메소드는 지원하지 않는다. 왜냐하면, 값은 중복이 허용되기 때문이다.
- entrySet의 경우, Iterator 타입 매개변수에 Map.Entry 객체 타입으로 받아야 한다.
Iterator<Map.Entry<String, Integer>> entrySet = hashMap.entrySet();
2. HashMap 코드
(1) HashMap 생성
- HashMap 을 생성할 때, 타입 파라미터에는 키와 값의 타입을 따로 지정해 주어야 한다.
import java.util.HashMap;
HashMap<String, String> map = new HashMap<>(); //String 타입의 Key, String 타입의 value
(2) HashMap의 데이터 삽입
- put(key, value) 메소드 사용
import java.util.HashMap;
HashMap(String, String> map = new HashMap<>(); //String 타입의 Key, String 타입의 value
map.put("apple","사과");
map.put("pineapple","파인애플");
map.put("kiwi","키위");
(3) HashMap의 데이터 접근
- get(key) 메소드 사용
- getOfDefault (key, defaultValue) 메소드는 HashMap에 해당 key값이 존재하지 않을 시 defaultValue를 반환한다.
import java.util.HashMap;
HashMap(String, String> map = new HashMap<>(); //String 타입의 Key, String 타입의 value
map.put("apple","사과");
map.put("pineapple","파인애플");
map.put("kiwi","키위");
String value1 = map.get("apple"); // "사과"
String value2 = map.getOrDefault("blueberry", "값이 없습니다");
// HashMap에 "blueberry" 가 존재하지 않을 경우 "값이 없습니다" 반환
(4) HashMap의 데이터 삭제
- remove(key) 메소드 사용
- clear() 메소드는 HashMap 의 모든 키 값을 삭제
- Map은 기본적으로 key 값을 이용하여 값에 접근하다.
import java.util.HashMap;
HashMap(String, String> map = new HashMap<>(); //String 타입의 Key, String 타입의 value
map.put("apple","사과");
map.put("pineapple","파인애플");
map.put("kiwi","키위");
map.remove("apple"); // key값을 이용하여 데이터 삭제
map.clear(); // HashMap에 있는 모든 키 값을 삭제
(5) HashMap의 Entry 객체 데이터 가져오기
- getKey() : Entry 객체의 key 값 반환
- getValue() : Entry 객체의 value 값 반환
(6) HashMap의 데이터 가져오기
- 키와 값 가져오기
- entrySet() 메서드 사용
Map<String, Integer> map = new HashMap<>();
map.put("John", 34);
map.put("Jane", 26);
map.put("Billy", null);
for (Map.Entry<String, Integer> m : map.entrySet()) {
System.out.println(String.format("Key (name) is: %s, Value (age) is : %s", m.getKey(), m.getValue()));
}
- 키만 가져오기
- keySet() 메서드 사용
- keySet() 은 키값들의 집합
- 모든 키를 순회할 때 사용 가능
for (String key : map.keySet()) {
System.out.println(key);
}
//for-each 문을 사용하여 모든 키 출력
for (String key : keySet()) {
System.out.println(key);
}
- 값만 가져오기
- values() 메서드 사용
for (String key : map.values()) {
System.out.println(key);
}
- 특정 키가 존재하는지 확인하기
- containsKey() 메서드 사용, 키가 존재한다면 true를 반환하고 존재하지 않는다면 false 를 반환
boolean result = map.containsKey("Jane");
System.out.println(result);
- 특정 값이 존재하는지 확인하기
- containsValue() 메서드 사용, 값이 존재한다면 true 를 반환하고 존재하지 않는다면 false를 반환
반응형
'Knowledge > 자료구조' 카테고리의 다른 글
[자료구조] 비선형 자료구조 - 힙 (Heap) (2) | 2023.11.18 |
---|---|
[자료구조] 우선순위 큐 (Priority Queue) (2) | 2023.11.17 |
[자료구조] 선형 자료구조 - 연결 리스트 (0) | 2023.11.15 |
[자료구조] 선형 자료구조 - 배열 (0) | 2023.11.15 |
[자료구조] 자료구조 (0) | 2023.11.15 |