Map<String, Integer> map = new HashMap<>();
map.put("A", 1);
map.put("B", 2);
map.put("C", 3);
보통 이렇게 값을 추가하지만 double brace initialize문법을 사용하면 아래처럼 생성이 가능함
Map<String, Integer> map = new HashMap<>(){{
put("A", 1);
put("B", 2);
put("C", 3);
}};
- 코드 간결
- 코드 가독성 좋음
- 동일 식에서 생성과 함께 초기화가 수행
- 모호하고 알려지지 않은 문법
- 사용할 때마다 추가 클래스 생성
- 상속 클래스가 final인 경우 동작 X
- 숨겨진 참조를 보유하고 있어 메모리 누수 유발 가능
map의 entrySet을 사용해 key, value 쌍의 목록을 얻을 수 있다.
Map<String, Integer> map = new HashMap<>(){{
put("A", 1);
put("B", 2);
put("C", 3);
}};
for(Map.Entry<String, Integer> entry : map.entrySet()){
System.out.println(entry.getKey() + ":" + entry.getValue());
}
keySet을 사용해 key의 목록을 얻고, 이를 통해 value를 얻을 수 있다.
Map<String, Integer> map = new HashMap<>(){{
put("A", 1);
put("B", 2);
put("C", 3);
}};
for(String key : map.keySet()){
System.out.println(key + ":" + map.get(key));
}
위의 경우, key를 통해 value를 찾는 과정이 추가돼 데이터 양이 많으면 비효율적일 수 있다.
그 경우에는 entrySet을 사용하자!
Map<String, Integer> map = new HashMap<>(){{
put("A", 1);
put("B", 2);
put("C", 3);
}};
Iterator<Map.Entry<String, Integer>> iter = map.entrySet().iterator();
while(iter.hasNext()){
var entry = iter.next(); // 타입 추론
System.out.println(entry.getKey() + ":" + entry.getValue());
}