민스씨의 일취일장

rTcl | Java Map은 순회가 안된다? (feat. Map.Entry) 본문

Programming Language & Framework/JAVA & Spring

rTcl | Java Map은 순회가 안된다? (feat. Map.Entry)

읻민스 2025. 2. 18. 16:53
반응형

Java Map.Entry에 대한 글이다.

Java Map은 순회가 안된다?

Java Map은 순회가 안된다? Map.Entry 썸네일 이미지이다.
Java Map은 순회가 안된다? Map.Entry

Map은 순회가 안된다 단순하게 학습한뒤, Map의 순회가 필요할 땐 별도의 데이터 구조(List, Array, Set)를 이용해 순회를 처리했었다. 하지만 이렇게 사용할 때, 로직이 복잡해질 수록 코드가 점점 복잡해지는 문제가 생겼다. 그래서 좀 더 자세히 알아보니 Map도 순회를 처리할 수 있는 방법이 있다는 것을 알게되었다. 방법은 바로 Map.Entry(EntrySet)를 사용하는 것이다.

Map.Entry란?

Map.Entry<K, V>는 Java의 Map 인터페이스 내부에 존재하는 인터페이스로, Map에 저장되어 있는 키-값 쌍(Entry)을 관리하는 데 사용된다.

이후 Key-Value 한 쌍을 Entry라고 부르겠다.

EntrySet

EntrySet은 Map을 Set으로 다루는 핵심 개념이다.

entrySet()

Map의 키-값인 Entry를 하나의 요소로 갖고 있는 Set을 반환한다. 반환타입은 Map.Entry<K, V>이다.

Map.Entity<K, V> entySet = map.entrySet();

getKey(), getValue()

각각의 Entry는 getKey()와 getValue()를 이용해 값을 조회할 수 있다.

setValue()

Entry에서 setValue()를 이용해 해당 Entry의 값을 설정할 수 있다. 이렇게 설정한(변경한) 내용은 Map에 반영된다.

📣 setValue()는 어떻게 Map 내의 데이터를 변경하는가?
setValue()가 Map 내의 데이터를 변경할 수 있는 방법은 두 가지 예측할 수 있다. 하나는 setValue() 내에 Map 데이터를 변경하는 로직이 들어가 있거나, 아니면 EntrySet의 값들이 Map 데이터를 참조하면 된다. 

예측은 여기까지이고, 실제로는 후자이다. EntrySet은 Map 데이터를 참조하는 Set이기 때문에 Set에서 데이터를 변경하면 Map에서도 바뀌어 있는 것이다.

순회 연산

Map을 EntrySet으로 다루면, Set의 성질인 순회 기능을 사용할 수 있다.

  • Set의 반복
for(Map.Entry<T, V> entry : map.entrySet()){
	System.out.println("Key : "+entry.getKey());
    System.out.println("Value : "+entry.getValue();
}

 

  • iterator()

Set 자체를 이용하는 것 말고도 Iterator()를 이용해 Iterator 객체로 만들어 순회할 수도 있다.

Iterator<Map.Entry<Key, Value>> iterator = map.entrySet().iterator();
while(iterator.hasNext()){
	Map.Entry<Key, Value> entry = iterator.next();
    System.out.println("Key : "+entry.getKey());
    System.out.println("Value : "+entry.getValue());
}
728x90
반응형