Hash Map
해시맵을 알고리즘으로 다뤄야하나 잠깐 고민했는데,
알고리즘 문제를 해결할 때 워낙 많이 사용해서 넣기로 결정했다.
HashMap은 키(key)와 값(value)을 저장하며 키를 이용하여 값을 검색하고 가져온다.
또한 키와 값이 모두 객체로 저장되며,
각각의 키와 값은 제네릭으로 선언하여 타입을 저장할 수 있다.
HashMap<String, Integer> map = new HashMap<String, Integer>();
HashMap에서 대표적으로 사용하는 메서드는 다음과 같다.
map.put("apple", 1);
key : apple
value : 1
위와 같은 쌍으로 HashMap에 저장한다는 의미이다.
int nubmer = map.get("apple");
key가 apple인 값을 가져온다.
apple의 value로 1을 저장했으니 number에 1을 저장한다.
map.remove("apple");
key가 apple인 값을 삭제한다.
for (String Key : map.keySet()) {
int value = map.get(Key);
System.out.println("Key : " + Key);
System.out.println("Value : " + value);
}
map.keySet()은 굉장히 자주 사용하는 함수중 하나로,
해시맵 전체를 탐색하며 Key를 return한다.
즉, 위와 같이 for문을 돌면 맵에 있는 모든 Key를 조회하여 value를 조회할 수 있는 것.
HashMap<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
int value = map.getOrDefault("C", 0);
System.out.println(value); // 0
value = map.getOrDefault("B", 0);
System.out.println(value); // 2
getOrDefault메서드는 주어진 키에 해당하는 값이 존재하는 경우 그 값을 반환하고,
존재하지 않을 경우 디폴트 값을 반환한다.
위 예제에서
존재하지 않는 C 값을 조회하는 경우 Default 값인 0을 return하고
존재하는 B값을 조회하는 경우 그에 해당하는 value인 2를 return한다.
아래는 HashMap을 사용하는 경우가 잦은 동일한 요소 카운트 코드이다.
- Java Code
int nums[] = {3, 3, 3, 2, 2, 4};
HashMap<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < nums.length; i++) {
int count = maps.getOrDefault(nums[i], 1);
maps.put(nums[i], count);
}
for (Integer Key : map.keySet()) {
int value = map.get(Key);
System.out.println("Key : " + Key);
System.out.println("Value : " + value);
}