Hi

Iterator의 순회 본문

Programming/Java

Iterator의 순회

SharingWorld 2018. 3. 28. 17:47
순회

순회(Traverse)
=> Stack을 다른 사람들이 내부 구조를 알지 못한다고 하더라도
순회를 하게 하고 싶다.

컬렉션(Collection)의 내부 구조에 상관없이 요소를 순회(열거)하고 싶다
=> Iterator

나의 컬렉션이 Iterator를 제공하고 있다.
=> Iterable

반복자(Iterator)를 사용할 때 주의할점
=> 순회 동안 절대 내부 요소에 크기의 변경이 발생하면 안된다.
: Concurrent Modification Exception

import org.junit.Test;

import java.util.Iterator;
import java.util.Stack;


// Iterator -> Enumerator
// Iterable -> Enumrable


class CountDownIterator implements Iterator<Integer> {
	private int n;
	public CountDownIterator(int n) {
		this.n = n;
	}

	@Override
	public boolean hasNext() {
		return n >= 0;
	}

	@Override
	public Integer next() {
		return n--;
	}
}

class CountDown implements Iterable<Integer> {
	private int n;
	public CountDown(int n) {
		this.n = n;
	}

	@Override
	public Iterator<Integer> iterator() {
		return new CountDownIterator(n);
	}
}

public class Sample_0326 {
	@Test
	public void foo() throws Exception {
		Stack<String> s = new Stack<>();
		s.push("Hello");
		s.push("Wello");

		System.out.println(s.pop());
	}

	public static void main(String[] args) {
		CountDown c = new CountDown(10);

		Iterator<Integer> iterator = c.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}

		for (Integer e : c) {
			System.out.println(e);
		}

// 10
// 9
// 8
// 7
// 6
// ...
// 1
// 0
	}
}


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

Java의 잘못 설계된 라이브러리의 특징 (멀티 스레드 안정성)  (0) 2018.03.29
스택을 만들어보자  (0) 2018.03.29
추상클래스와 인터페이스의 차이점  (0) 2018.03.28
Iterator  (0) 2018.03.28
SOLID  (0) 2018.03.28