이터레이터 패턴

이강용·2024년 2월 28일
0

CS

목록 보기
20/109

이터레이터 패턴이란?

  • 이터레이터(iterator)를 사용하여 컨테이너의 요소들에 접근하는 디자인 패턴. 각기 다른 자료구조들을 똑같은 인터페이스로 순회를 쉽게 할 수 있다는 장점이 있다. 컨테이너란 동일한 요소들을 담아놓는 집합을 말하며 배열, 맵 등이 있다.
const mp = new Map();
mp.set("a,1");
mp.set("b,2");
mp.set("cccc,3");
const st = new Set();
st.add(1);
st.add(2);
st.add(3);

const a = [];
for (let i = 0; i < 10; i++) a.push(i);

for (let aa of a) console.log(aa);
for (let a of mp) console.log(a);
for (let a of st) console.log(a);

자바의 Map에서 Iterator를 사용하는 방법을 보자.
Map 인터페이스는 키와 값을 쌍으로 구성된 데이터 구조를 제공한다. 하지만 Map자체에는 Iterator 인터페이스가 직접 정의되어 있지 않다. 대신 MapentrySet(), keySet(), values() 메서드를 통해 Set 또는 Collection을 얻은 후, 이를 통해 Iterator를 사용할 수 있다.

  1. 키(key)에 대한 Iterator사용하기
  • Map의 keySet() 메서드를 사용하여 키Set을 얻고, 이 Set에 대한 Iterator를 생성
 Map<String, Integer> map = new HashMap<>();
 map.put("Apple", 1);
 map.put("Banana", 2);
 map.put("Cherry", 3);

// 키에 대한 Iterator 사용
Iterator<String> keyIterator = map.keySet().iterator();
System.out.println("Keys:");
while (keyIterator.hasNext()) {
	String key = keyIterator.next();
    System.out.println(key);
}
  1. 값(Value)에 대한 Iterator 사용하기
  • Map의 values() 메서드를 사용하여 값 Collection을 얻고, 이 Collection에 대한 Iterator를 생성
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);

        

// 값에 대한 Iterator 사용
Iterator<Integer> valueIterator = map.values().iterator();
System.out.println("\nValues:");
while (valueIterator.hasNext()) {
	Integer value = valueIterator.next();
    System.out.println(value);
}
  1. 키 - 값 쌍(Entry)에 대한 Iterator 사용하기
  • Map의 entrySet() 메서드를 사용하여 키 - 값 쌍의 Set을 얻고, 이 Set에 대한 Iterator를 생성
Map<String, Integer> map = new HashMap<>();
map.put("Apple", 1);
map.put("Banana", 2);
map.put("Cherry", 3);

        
// 키-값 쌍에 대한 Iterator 사용
Iterator<Map.Entry<String, Integer>> entryIterator = map.entrySet().iterator();
System.out.println("\nEntries:");
while (entryIterator.hasNext()) {
	Map.Entry<String, Integer> entry = entryIterator.next();
    System.out.println(entry.getKey() + ": " + entry.getValue());
}
profile
HW + SW = 1

0개의 댓글