HashMap은 Map의 인터페이스를 구현한 대표적인 Map 컬렉션의 일종으로, 당연히 Map을 상속받았기 때문에 키(Key)와 값(Value)로 구성된다는 Map의 구조를 그대로 따르고있다.
HashMap 선언
아래 예시와 같은 경우 key값의 형식으로 String을, value값의 형식으로는 Integer값을 사용함을 의미한다.
// < key값, value값 >
HashMap<String, Integer> hm1 = new HashMap<String, Integer>();
HashMap<String, Integer> hm2 = new HashMap<String, Integer>(hm1); // hm1과 동일한 값을 가진 HashMap 생성
HashMap<String, Integer> hm3 = new HashMap<String, Integer>(10); // 초기 용량(capacity) 지정
HashMap<String, Integer> hm4 = new HashMap<String, Integer>(){{ put("apple", 1); }}; // 초기값 지정
값 추가하기
값을 추가할 때는 put(key, value) 메소드를 이용한다.
선언할 때 key-value의 타입을 String-Integer로 지정해줬기 때문에, put메소드의 매개변수를 입력할 때에도 같은 형식으로 입력해줘야 한다.
HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("Apple", 1);
hm.put("Melon", 3);
hm.put("Lemon", 2);
위와 같은 경우 HashMap에는 아래와 같이 저장되어있을 것이다.
여기에 다음과 같은 작업을 추가로 한다면 어떻게 될까?
hm.put("Melon", 1);
Melon의 Value값은 4가 아니라, 1로 덮어씌워지게된다.
즉, 입력된 Key가 HashMap 내에 이미 존재한다면 그 Key에 대한 Value는 새로 덮어씌워지게 되는 것이다.
만약 입력을 통해 Value값을 추가하고 싶은 경우에는 다음과 같이 하면 된다.
if (hm.containsKey(k)) {
hm.put(s, hm.get(k) + v);
} else {
hm.put(s, v);
}
값 삭제하기
HashMap의 값을 삭제할 경우에는 remove(key)메소드와 clear()메소드를 이용할 수 있다.
remove(key)의 경우 매개변수로 입력되는 key값에 해당되는 요소를 삭제하고, clear()의 경우에는 HashMap 내의 모든 요소를 삭제한다.
hm.remove("Melon"); // {"Apple", 1}, {"Lemon", 2}
hm.clear(); // 요소 X
값 출력하기
HashMap의 값을 출력하는 방법은 다양한 방법이 있는데, Iterator를 활용하는 방법, print를 이용하여 출력하는 방법, 배열로 저장해서 출력하는 방법 등이 있습니다.
1. 그냥 print를 이용
HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("Apple", 1);
hm.put("Melon", 3);
hm.put("Lemon", 2);
hm.put("Melon", 1);
System.out.println(hm);
2. Iterator 이용
HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("Apple", 1);
hm.put("Melon", 3);
hm.put("Lemon", 2);
hm.put("Melon", 1);
Iterator<String> keys = hm.keySet().iterator();
while(keys.hasNext()) {
String key = keys.next();
System.out.println("[key: " + key + "], [val: " + hm.get(key)+"]");
}
3. key값을 배열로 저장
HashMap<String, Integer> hm = new HashMap<String, Integer>();
hm.put("Apple", 1);
hm.put("Melon", 3);
hm.put("Lemon", 2);
hm.put("Melon", 1);
Object[] keys = hm.keySet().toArray();
for (int i = 0; i < keys.length; i++) {
int val = hm.get(keys[i]);
System.out.println("[key: " + keys[i] + "], [val: " + val + "]");
}
결과 위와 동일
1번의 경우는 별다른 추가작업을 거치지 않고 hm변수만으로 간편하게 출력할 수 있다는 장점이 있습니다.
2, 3번의 경우 출력형식을 변경하거나 다른 값과 연관되어 사용해야 할 필요가 있는 경우 용이하게 사용할 수 있습니다.
특히 3번의 경우 배열 정렬을 통하여 key값의 순서대로 정렬이 가능하다는 장점이 있습니다.
'플밍 > 자료구조, 알고리즘' 카테고리의 다른 글
트라이(Trie)의 개념과 활용 (0) | 2022.02.15 |
---|---|
그래프의 탐색(DFS, BFS) (0) | 2021.09.02 |
그래프에 대해서 알아보자 (0) | 2021.09.02 |
비트마스크(BitMask)에 대해서 알아보자 (0) | 2021.08.08 |
[자료구조] 힙(Heap)과 우선순위 큐(Priority Queue) (0) | 2021.08.07 |