Iterator
- 컬렉션에 저장된 요소에 접근하는 데 사용되는 인터페이스로, 컬렉션 요소를 읽어오는 방법을 표준화함으로써 코드의 일관성을 유지하고 재사용성을 극대화할 수 있다.
- Collection 인터페이스는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메서드를 정의해 놓았다.
- 따라서 컬렉션 클래스에 대해 iterator()를 호출하여 Iterator를 얻은 다음 반복문을 사용해서 컬렉션 클래스의 요소를 읽을 수 있다.
List list = new ArrayList();
Iterator iter = list.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
- Map 인터페이스를 구현한 컬렉션 클래스는 iterator()를 직접 호출할 수 없고, keySet()이나 entrySet()과 같은 메서드를 통해 키와 값을 각각 따로 Set 형태로 얻어온 후에 다시 iterator()를 호출해야 한다.
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
메서드
boolean hasNext() | 읽어올 요소가 남아있는지 확인하는 메서드로, 해당 이터레이션이 다음 요소를 가지고 있으면 true를 반환하고 더이상 다음 요소를 가지고 있지 않으면 false를 반환한다. |
E next() | 다음 요소를 읽어오는 메서드로, 호출하기 전 hasNext()를 통해 읽어올 요소가 있는지 확인하는 것이 안전하다. |
void remove() | next()로 읽어온 요소를 삭제하며, next()를 호출한 다음에 호출해야 한다. |
ListIterator
- Iterator 인터페이스를 상속받아서 여러 기능을 추가한 인터페이스
- Iterator 인터페이스는 컬렉션의 요소에 접근할 때 한방향으로만 이동할 수 있지만, ListIterator 인터페이스는 컬렉션 요소의 대체, 추가, 인덱스 검색 등을 위한 작업에서 양방향으로 이동하는 것을 지원한다.
- 단, ListIterator 인터페이스는 List 인터페이스를 구현한 List 컬렉션 클래스에서만 listIterator()를 통해 사용할 수 있다.
LinkedList<Integer> lnkList = new LinkedList<Integer>();
lnkList.add(4);
lnkList.add(2);
lnkList.add(3);
lnkList.add(1);
ListIterator<Integer> iter = lnkList.listIterator();
while (iter.hasNext()) {
System.out.print(iter.next() + " ");
}
while (iter.hasPrevious()) {
System.out.print(iter.previous() + " ");
}
'Java > Java' 카테고리의 다른 글
Arrays, Collections (0) | 2022.03.28 |
---|---|
Comparable과 Comparator (0) | 2022.03.28 |
Map 컬렉션 클래스 (0) | 2022.03.28 |
Set 컬렉션 클래스 (0) | 2022.03.28 |
컬렉션 프레임워크와 List 컬렉션 클래스 (0) | 2022.03.28 |