Java의 Iterator, ListIterator
* Iterator<E>
컬렉션 프레임워크에서 저장된 요소를 읽어오는 방법을 표준화하기 위해 사용한다.
Collection 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메소드를 정의하여 각 요소에 접근하도록 하고 있다.
Collection 인터페이스를 상속받는 List와 Set 인터페이스 또한 iterator() 메소드를 사용할 수 있습니다. (Map 제외)
- List 데이터를 반복하는 방법
1. for( int i =0; i<list.length; i++) { ... }
2. for( String str : list ) { ... }
3. Iterator<String> iter = list.iterator();
while(iter.hasNext()) { System.out.println(iter.next()); }
- Map 자료구조에서 사용하기
Set<String> keys = map.keySet(); // Map의 Key를 가져온다
Iterator<String> iter = keys.iterator(); // Set 자료구조를 통해 사용
while(iter.hasNext()) {
String key = iter.next();
System.out.printf(key, map.get(key));
}
- 관련 메서드
hasNext() | iteration이 다음 요소를 가지고 있는지 boolean 형태로 반환 |
next() | iteration의 다음 요소를 반환 |
remove() | 해당 반복자로 반환되는 마지막 요소를 현재 컬렉션에서 제거 |
* ListIterator<E>
Iterator 인터페이스를 상속받아 여러 기능을 추가한 인터페이스이다.
Iterator 인터페이스는 컬렉션의 요소에 접근할 때 한 방향으로만 이동할 수 있다.
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() + " ");
}
- 관련 메서드
void add(E e) | 해당 리스트에 전달된 요소를 추가 |
boolean hasNext() | 해당 리스트를 순방향으로 순회할 때 다음 요소를 가지고 있으면 true 반환, 더 이상 다음 요소를 가지고 있지 않으면 false 반환 |
boolean hasPrevious() | 해당 리스트를 역방향으로 순회할 때 다음 요소를 가지고 있으면 true 반환, 더 이상 다음 요소를 가지고 있지 않으면 false 반환 |
E next() | 리스트의 다음 요소를 반환하고, 커서의 위치를 순방향으로 이동 |
int nextIndex() | 다음 next() 메소드를 호출하면 반환될 요소의 인덱스 반환 |
E previous() | 리스트의 이전 요소를 반환하고, 커서의 위치를 역방향으로 이동 |
int previousIndex() | 다음 previous() 메소드를 호출하면 반환될 요소의 인덱스 반환 |
void remove() | next()나 previous() 메소드에 의해 반환된 가장 마지막 요소를 리스트에서 제거 |
void set(E e) | next()나 previous() 메소드에 의해 반환된 가장 마지막 요소를 전달된 객체로 대체 |
'CS > Algorithm' 카테고리의 다른 글
[Algorithm/JAVA] Comparator, Comparable (0) | 2021.01.31 |
---|---|
[Algorithm] 그래프(Graph) (0) | 2020.11.15 |
[Algorithm/Java] LinkedList 자료구조 (0) | 2020.11.14 |
[Algorithm] BFS, 너비 우선 탐색 (0) | 2020.11.14 |
[Algorithm] DFS, 깊이 우선 탐색 (0) | 2020.11.02 |