연결리스트의 순회 : Iterator의 필요성
public 메서드들 만을 이용하여 연결리스트를 순회하려면?
Iterator
노드의 주소를 직접 사용자에게 제공하는 대신 그것을 private 멤버로
wrapping하고 있으면서 사용자가 필요로 하는 일을 해주는 public method를
가진 Iterator 객체를 제공한다.
사용자가 연결리스트를 한방에 순차적으로 순회하기 위해서는
연결리스트의 전에 방문한 주소를 가지고있어야한다.
연결리스트의 노드의 주소를 직접 줄 수 없다 이유는
private 으로 지정되어있기때문이다.(Node)
그래서 그 주소를 private 멤버로 가지고 있으면서
그 주소가 가리키고 있는 노드의 데이터를 리턴해주고
자신은 한칸 앞으로 전진하는 Iterator 객체를 만들어
사용자에게 주므로 사용자는 Iterator를 이용하여
순회 할 수 있다.
Iterator를 이용한 순회
MySingleLinkedList<String> aList = new MySingleLinkedList<String>();
aList.add("Some String");
Iterator<String>iter = aList.iterator();
while(iter.hasNext()){
String str = iter.next();
//do something with str
}
java.util이 Iterator<E> 인터페이스를 정의한다.
MyLingkedList 클래스는 메서드 iterator() 제공
MySingleLinkedList<E> 클래스는 Iterator<E> 인터페이스를
구현하는 하나의 클래스 inner 클래스로 가지며, iterator() 메서드는
이 클래스의 객체를 생성하여 반환한다.
연결리스트에서의 Iterator
Iterator는 개념적으로는 연결리스트의 노드와 노드 사이를 가리킨다.
초기상태의 iterator는 첫 번째 노드의 앞 위치를 가리킨다.
next() 메서드는 한칸 전진하면서 방금 지나친 노드의 데이터를 반환
hasNext() 메서드는 다음 노드가 존재하면 true, 그렇지 않으면 false를 반환한다.
remove() 메서드는 가장 최근에 next() 메서드로 반환한 노드를 삭제한다.
'알고리즘 with 자바 > 자료구조' 카테고리의 다른 글
| 연결리스트와 Iterator 3 (0) | 2021.07.21 |
|---|---|
| 연결리스트와 Iterator 1 (0) | 2021.07.19 |
| 연결리스트의 개념과 기본연산 5 (0) | 2021.07.19 |
| 연결리스트의 개념과 기본연산 4 (0) | 2021.07.15 |
| 연결리스트의 개념과 기본연산 3 (0) | 2021.07.15 |







