💡Iterator Interface
Iterator 인터페이스는 List 계열과 Set계열 모두 지원하는 탐색 도구이다.
Iterator는 어떤 집합을 탐색하는 데 사용하는 기본적인 도구 중에 하나로, Set 안에 들어있는 데이터를 하나씩 접근할 수 있게 한다.
hasNext(), next() 메소드
Iterator<Integer> iter = lotto2.iterator();
System.out.println(iter.hasNext()); // true
System.out.println(iter.next()); // 26
hasNext() 메소드는 요소의 존재 유무를 리턴한다. 이때 반환할 값이 있으면 true, 없으면 false를 리턴한다.
그리고 next() 메소드는 Iterator가 가리키는 요소를 리턴하는 역할을 한다.
System.out.println(iter.hasNext()); // true
System.out.println(iter.next()); // 41
System.out.println(iter.hasNext()); // true
System.out.println(iter.next()); // 38
System.out.println(iter.hasNext()); // true
System.out.println(iter.next()); // 33
System.out.println(iter.hasNext()); // true
System.out.println(iter.next()); // 11
System.out.println(iter.hasNext()); // true
System.out.println(iter.next()); // 6
System.out.println(iter.hasNext()); // false
// System.out.println(iter.next()); // NoSuchElementException
while (iter.hasNext()) {
System.out.println(iter.next());
}
메소드를 호출할 때마다 배열 안에 들어있는 값을 순서대로 가져오는 것을 볼 수 있다.
만약 가져올 값이 없으면 NoSuchElementException 오류가 발생한다.
Iterator의 이동
Iterator는 생성된 후 첫 번째 값인 BOF를 가리킨다. Iterator에 명령을 내리면 순차적으로 이동한다. 그리고 해당 위치에 데이터가 있는지를 검사하는 게 바로 hasNext() 메소드이다.
next() 메소드는 Iterator를 이동시키며, 그 위치의 데이터를 반환한다.
BOF(Begin of File) 에서 File은 어떤 데이터가 모여있는 집합을 의미한다. 따라서 BOF는 배열의 시작이라고 할 수 있다. 반대로 EOF(End of File)는 배열의 끝을 의미한다.