goal
java의
interface Iterator
와interface ListIterator
를 이해한다.
1. java의 interface Iterator
java의 Iterator 인터페이스
는 collection framework
의 요소들을 읽어오는 방법중 하나이다.
Iterator 인터페이스
는 컬렉션의 요소에 접근할 때 한 방향으로만 이동할 수 있다.
public interface Iterator<E>{
boolean hasNext();
E next();
default void remove(){ throw new UnsupportedOperationException("remove"); };
default void forEachRemaining(Consumer<? super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
Iterator 인터페이스
의 method들은 컬렉션의 사용방법에 따라 오버라이딩되나 공통 사용법은 아래와 같다.
메소드 | 설명 |
boolean hasNext() | 해당 iteration이 다음 요소를 가지고 있으면 true반환, 없으면 false반환 - 반복문에 사용된다. |
E next() | iteration의 다음 요소를 반환함 |
default void remove() | 해당 반복자로 반환되는 마지막 요소를 현재 컬렉션에서 제거함. (선택적 기능) |
[1] HashMap Collection + iterator 실습하기
- HashMap + Iterator 인터페이스 [실습하기]
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class Note {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("one", "하나");
map.put("two", "둘");
map.put("three", "셋");
map.put("four", "넷");
map.put("five", "다섯");
Set<String> keys = map.keySet();
Iterator<String> iter = keys.iterator();
while(iter.hasNext()) {
String key = iter.next();
System.out.println(key);
}
}
}
- 출력값
※ Set은 순서가 없음을 반드시 상기한다.
2. java의 interface ListIterator
java의 Iterator 인터페이스
를 상속하여 만들어진 ListIterator 인터페이스
ListIterator 인터페이스
는 컬렉션 요소의 대체, 추가 그리고 인덱스 검색 등을 위한 작업에서 양방향으로 이동하는 것을 지원한다.- 단,
ListIterator 인터페이스
는List 인터페이스
를 구현한 List 컬렉션 클래스에서만listIterator() 메소드
를 통해 사용할 수 있다.
[1] interface ListIterator 메소드 정리
메소드 | 설명 |
void add(E e) | 해당 리스트(list)에 전달된 요소를 추가한다. |
boolean hasNext() | 이 리스트 반복자가 해당 리스트를 순방향으로 순회할 때 다음 요소를 가지고 있으면 true를 반환하고, 더 이상 다음 요소를 가지고 있지 않으면 flase를 반환한다. |
boolean hasPrevious() | hasNext()와 역인 관계 |
E next() | 리스트의 다음 요소를 반환하고, 커서(cursor)의 위치를 순 반향으로 이동시킨다. |
int nextIndex() | 다음 next()메소드를 호출하면 반환될 요소의 인덱스를 반환한다. |
E previous() | 리스트의 이전 요소를 반환하고, 커서(cursor)의 위치를 역방향으로 이동시킴 |
int previousIndex() | 다음 prevoious()메소드를 호출하면 반환될 요소의 인덱스를 반환한다. |
void remove() | next()나 previous()메소드에 의해 반환된 가장 마지막 요소를 리스트에서 제거 (선택적 기능) |
void set(E e) | next()나 previous() 메소드에 의해 반환된 가장 마지막 요소를 전달된 객체로 대체함. (선택적 기능) |
[2] LinkedList + ListIterator 실습하기
- LinkedList + iterator 실습
import java.util.LinkedList;
import java.util.ListIterator;
public class Note {
public static void main(String[] args) {
LinkedList<Integer> lnList = new LinkedList<Integer>();
lnList.add(19);
lnList.add(4);
lnList.add(15);
lnList.add(18);
ListIterator<Integer> iter = lnList.listIterator();
while(iter.hasNext()){
System.out.println(iter.next() + " ");
}
System.out.println();
while(iter.hasPrevious()){
System.out.println(iter.previous() + " ");
}
}
}
- 출력값