728x90

 


Java를 활용하다 보면 종종 데이터를 매핑하는 작업이 필요한 경우가 있습니다.

 

특히 맵(Map)을 사용할 때는 맵에 저장된 모든 엔트리(키-값 쌍)에 접근하는 것이 중요합니다.

 

이때 유용하게 사용할 수 있는 메서드 중 하나가 entrySet() 메서드입니다. entrySet() 메서드는 맵의 각 엔트리를 가져오는 데 유용하며, 여러 가지 상황에서 유연하게 활용할 수 있습니다.

 

 

entrySet() ❓

Set<Map.Entry<K, V>>

 

HashMap은 모든 객체를 항목 형태로 저장합니다.

 

항목은 키와 값의 쌍이며, 각 값은 고유한 키와 연관되어 있습니다. Java entryset() 메서드를 사용하면 HashMap에서 모든 항목을 가져올 수 있습니다. 

 

entrySet() 사용 ❌

import java.util.HashMap;
import java.util.Map;

public class NoEntrySetExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("A", 1);
        map.put("B", 2);
        map.put("C", 3);

        // keySet()을 사용하여 맵의 각 키에 접근하고 값 출력하기
        for (String key : map.keySet()) {
            Integer value = map.get(key);
            System.out.println("Key: " + key + ", Value: " + value);
        }
    }
}

 

entrySet()을 사용하지 않고 Map의 키(key)와 값(value)에 각각 접근하는 방법은 keySet()get() 메서드를 활용하는 것입니다.

 

entrySet() 사용 ⭕️

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class EntrySetExample {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        map.put("A", 1);
        map.put("B", 2);
        map.put("C", 3);

        // entrySet()을 사용하여 맵의 각 엔트리에 접근하고 출력하기
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        for (Map.Entry<String, Integer> entry : entrySet) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
    }
}

 

 

  • entrySet() 메서드: Map 인터페이스에 정의된 메서드로, 맵의 각 엔트리(키-값 쌍)를 Set <Map.Entry <K, V>> 형태로 반환합니다.
  • Set<Map.Entry<String, Integer>> entrySet = map.entrySet(); 에서 entrySet 변수는 맵의 모든 엔트리를 포함하는 Set으로 초기화됩니다.
  • for (Map.Entry<String, Integer> entry : entrySet):  entrySet에 포함된 각 엔트리를 반복적으로 접근합니다.
  • entry.getKey()와 entry.getValue()를 사용하여 각 엔트리의 키와 값을 가져와 출력합니다.

 

 

Map.Entry <K, V>의 메서드

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

public class EntrySetMethodsExample {
    public static void main(String[] args) {
        // HashMap 생성 및 데이터 추가
        Map<String, Integer> map = new HashMap<>();
        map.put("A", 1);
        map.put("B", 2);
        map.put("C", 3);

        // entrySet()을 사용하여 맵의 각 엔트리에 접근하기
        Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
        
        // 각 엔트리의 키(key)와 값을 출력하기
        for (Map.Entry<String, Integer> entry : entrySet) {
            String key = entry.getKey();
            Integer value = entry.getValue();
            System.out.println("Key: " + key + ", Value: " + value);
        }
        
        // 각 엔트리의 값(value) 수정하기
        for (Map.Entry<String, Integer> entry : entrySet) {
            if (entry.getKey().equals("B")) {
                entry.setValue(100); // 키가 "B"인 엔트리의 값을 100으로 변경
            }
        }
        
        // 수정된 값 확인
        System.out.println("After modification:");
        for (Map.Entry<String, Integer> entry : entrySet) {
            System.out.println("Key: " + entry.getKey() + ", Value: " + entry.getValue());
        }
    }
}

 

  • getKey(): 엔트리의 키(key)를 반환합니다.
  • getValue(): 엔트리의 값(value)를 반환합니다.
  • setValue(V value): 엔트리의 값을 지정된 값(value)으로 설정합니다.

 

 

entrySet()의 장점

 

  • 간편한 접근
    •  entrySet()을 사용하면 맵의 모든 엔트리에 대해 쉽게 접근할 수 있습니다.
    • 각 엔트리의 키와 값을 getKey()getValue() 메서드를 통해 직접적으로 읽고 수정할 수 있습니다.
  • 효율적인 순회
    •  entrySet()을 사용하면 맵의 엔트리를 순회하며 작업을 수행할 수 있습니다.
    • for-each 루프스트림 API를 활용하여 간단하게 모든 엔트리를 처리할 수 있습니다.
  • 데이터 수정의 용이성
    •  entrySet()에서 가져온 엔트리를 수정하면 원래 맵의 데이터자동으로 수정됩니다.
    • 따라서 맵의 데이터를 수정할 때 불필요한 복사나 추가적인 작업을 최소화할 수 있습니다.