[Java] Map.entrySet()

2024. 8. 25. 15:24Language/Java

 기존에 알고 있던 'keySet()' 을 사용하면 'Set<keyType>' 타입으로 Map 객체가 가지고 있는 'key' 값들을 반환해 준다. 하지만 때로는 'key' 값과 'value' 값을 함께 반환받는 것이 필요할 때가 있다. 이럴 때 사용하는 것이 'entrySet()' 메서드로 ' 'key' 와 'value' 를 한 쌍으로 하여 함께 반환 받을 수 있다. 오늘은 해당 메서드를 직접 다루어보며 기능을 확인해보자.

 

1. 기본 문법

Map<key type, value type> map = new HashMap<>();

Set<Map.Entry<key type, value type>> mapEntrySet = map.entrySet();

 

 Entry 는 인터페이스로 Map 인터페이스와 함께 사용되는 듯하다. 인터페이스 설명에 따르면 'entry' 는 Map 의 항목(key-value pair)을 뜻 한다. 즉, 'Map.Entry' 를 사용하면 Map 의 항목이 객체 단위로 저장되는 것이다.

 

 Entry 의 특징 중 하나는 바로 동기화가 제공된다는 것이다. 위 예시처럼 Map 객체가 존재하고 해당 객체에 'entrySet()' 을 사용하여 얻은 결과를 수정('setValue()' 가 구현되어 있어야함)하면 기존 Map 객체의 데이터도 수정되는 것이다. 반대로 기존 Map 객체의 데이터가 수정되면 'entrySet()' 의 결과에 반영된다.

 

 

2. 사용 예시

2-1. key, value 확인

// 테스트용 HashMap 객체 생성 및 테스트 데이터 추가
Map<String, Integer> price = new HashMap<>();
price.put("과자", 2000);
price.put("라면", 1500);
price.put("우유", 5000);
price.put("커피", 3000);

// Map 이 가진 key 확인 - keySet() 사용
Set<String> priceKey = price.keySet();
System.out.println("저장된 key : " + priceKey);

for (String k : priceKey) {
	System.out.println(k + " - " + price.get(k));
}

System.out.println("=================================");

// Map 이 가진 entry(key-value pair) 확인 - entrySet() 사용
Set<Map.Entry<String, Integer>> priceKeyAndValue = price.entrySet();
System.out.println("저장된 key + value : " + priceKeyAndValue);

for (Map.Entry<String, Integer> kv : priceKeyAndValue) {
	System.out.println(kv.getKey() + " - " + kv.getValue());
}

// 결과
저장된 key : [과자, 커피, 우유, 라면]
과자 - 2000
커피 - 3000
우유 - 5000
라면 - 1500
=================================
저장된 key + value : [과자=2000, 커피=3000, 우유=5000, 라면=1500]
과자 - 2000
커피 - 3000
우유 - 5000
라면 - 1500

 

 'keySet()' 과 'entrySet()' 을 비교하기 위해 두 메서드를 사용한 예시이다. 두 메서드가 반환하는 결과의 큰 차이는 반환 타입이다. 'keySet()' 의 경우 'key' 타입을 가지는 'Set' 객체가 반환되지만 'entrySet()' 의 경우 'key' 와 'value' 의 타입을 가지는 'Map.Entry' 객체가 반환된다. 타입이 다르기에 출력 결과도 차이가 보이는데 'keySet()' 은 'key' 값들이 출력되고 'entrySet()' 은 'key' 와 'value' 가 한 쌍을 이루며 페어(쌍)들이 출력된다.

 

 또한 Map 객체의 각 요소의 'key', 'value' 값을 조회하는 방법도 다른데 'keySet()' 의 경우 반환 값 자체가 'key' 값이므로 Map 객체에 'get(key)' 메서드를 사용해 'value' 값을 조회하며, 'entrySet()' 의 경우 Map.Entry 객체에 'getKey()' 와 'getValue()' 를 사용하면 각각 'key' 값과 'value' 값을 조회할 수 있다.

'Language > Java' 카테고리의 다른 글

[Java] Map.getOrDefault(K key, V default-value)  (0) 2024.08.25
[Java] Map.computeIfAbsent(K key, Function)  (0) 2024.08.22
[Java] PriorityQueue  (0) 2024.08.10