연결리스트의 순회 : 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() 메서드로 반환한 노드를 삭제한다.

 

+ Recent posts