문제
import java.util.*;
public class Solution {
public int addOddValues(HashMap<Character, Integer> hashMap) {
}
}
KeySet, values(), entrySet 이렇게 3가지 방법을 이용해 풀어 보겠다.
hashMap은 iterator를 사용하려면 Set을 이용해야한다.
keySet 이용
int sum = 0;
Set<Character> keySet = hashMap.keySet();
Iterator<Character> it = keySet.iterator();
while (it.hasNext()) {
int num = hashMap.get(it.next());
if(num % 2 == 0) sum += num;
}
return sum;
keySet 이용시 it.next가 hashmap의 key를 가르키므로 hashMap.get(it.next)로 값을 가져올 수 있다.
values 이용
int sum = 0;
Collection<Integer> values = hashMap.values();
Iterator<Integer> it = values.iterator();
while(it.hasNext()){
int num = it.next();
if(num % 2 == 0) sum += num;
}
return sum;
values는 value값을 저장하고 있기 때문에 it.next에 이미 velue값이 들어가 있다.
entrySet 이용
int sum = 0;
Set<Map.Entry<Character, Integer>> entrySet = hashMap.entrySet();
Iterator<Map.Entry<Character, Integer>> it = entrySet.iterator();
while(it.hasNext()){
int num = it.next().getValue();
if(num % 2 == 0) sum += num;
}
return sum;
Iterator를 쓰기위해 Set으로 변형하는데 이때 Set의 요소가 entry 객체 이고 이 요소들의 타입이 entry타입이다. 그런데 entry인터페이스는 map의 내부 인터페이스이기 때문에 map.entry로 접근하고 entry의 키값과 벨류값도 선언한다.
it.next()가 가르키는게 entry객체이므로 velue값을 가져오려면 getValue()를 사용하면되고
key값을 가져오려면 getKey()를 사용한다.