Iterator(JAVA)
Iterator(JAVA)
- Collection에서 데이터들을 중복없이 하나 씩 꺼낼 수 있게 해준다
- 자바에서 Iterator 인터페이스를 제공, List나 Map, Set 등이 Iterator 를 구현
- for문에서는 요소의 개수 파악 후 반복문을 수행하는데 Iterator는 개수를 파악하지 않고 모든 요소를 순차적으로 불러온다
- Iterator 인스턴스는
new를 사용하지 않고 Collection 인스턴스의iterator()를 통해 내부적으로 생성한다
ArrayList list = new ArrayList();
Iterator iter = list.iterator();
ArrayList의 Iterator 구현
public class ArrayList<E> extends AbstractList<E> implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
//..
public Iterator<E> iterator() {
return new Itr(); //내부 클래스 => 내부 데이터에 접근 가능
}
private class Itr implements Iterator<E> {
int cursor; // 리턴할 다음 index.
int lastRet = -1; // 가장 마지막에 리턴한 요소의 index. 없을 경우 -1리턴
int expectedModCount = modCount;
Itr() {}
public boolean hasNext() {
return cursor != size;
}
@SuppressWarnings("unchecked")
public E next() {
checkForComodification();
int i = cursor;
if (i >= size)
throw new NoSuchElementException();
Object[] elementData = ArrayList.this.elementData;
if (i >= elementData.length)
throw new ConcurrentModificationException();
cursor = i + 1;
return (E) elementData[lastRet = i];
}
}
사용 예시
public void method(){
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
Iterator<String> it = list.iterator();
while(it.hasNext()){
String s = it.next();
System.out.println(s);
}
}
- hasNext(): 다음 요소가 있는지 Boolean 타입으로 반환
- next(): 다음 요소를 반환
참고
[ JAVA ] Iterator 분석 (feat. ArrayList)
자바 튜토리얼 12 - 4 | Iterator, ArrayList | 컬렉션 프레임워크 |
보완/복습
- 2023.10.10 복습