개발 일지/Java

[Java] 반복자(Iterator)

미숫가루설탕많이 2023. 1. 4. 19:50

 iterator의 사전적 의미는 '반복자'이며, 컬렉션에 저장된 요소들을 순차적으로 읽어오는 역할을 한다.

 

 Collection 인터페이스에 정의된 iterator()를 호출하면, iterator 타입의 인스턴스가 반환된다. 따라서 Collection 인터페이스를 상속받는 List와 Set 인터페이스를 구현한 클래스들은 interator() 메서드를 사용할 수 있다.

 

 다음은 iterator 인터페이스에 정의된 메서드이다.

 

  • hasNext()
    : 읽어올 객체가 남아 있으면 true를 리턴하고 없으면 false를 리턴한다.

  • next()
    : 컬렉션에서 하나의 객체를 읽어온다. 이 때, next()를 호출하기 전에 hasNext()를 통해 읽어올 다음 요소가 있는지 먼저 확인해야 한다.

  • remove()
    : next()를 통해 읽어온 객체를 삭제한다. next()를 호출한 다음에 remove()를 호출해야 한다.

 

 

 다음은 List에서 String 객체들을 반복해서 하나씩 가져오는 코드이다.

ArrayList<String> list = ...;
Iterator<String> iterator = list.iterator();

while(iterator.hasNext()) {
	String str = iterator.next();
	...
}

 

 여기서 hasNext() 메서드는 읽어올 다음 객체가 없으면 false를 리턴하기 때문에 true가 리턴될 때만 next() 메서드가 동작하도록 코드를 작성해야 한다.

 

 next() 메서드로 가져온 객체를 컬렉션에서 제거하고 싶다면 remove() 메서드를 호출하면 된다. next() 메서드는 컬렉션의 객체를 실제로 빼내는 것이 아닌, 그저 읽어오는 메서드이다. 하지만 remove() 메서드는 컬렉션에서 실제로 객체를 삭제한다.

 

 다음은 remove() 메서드를 통해 객체를 삭제하는 코드이다.

ArrayList<String> list = ...;
Iterator<String> iterator = list.iterator();

while(iterator.hasNext()){
	String str = iterator.next();
	if(str.equals("str과 같은 단어")){
		iterator.remove();
	}
}

'개발 일지 > Java' 카테고리의 다른 글

[Java] 람다식(Lambda Expression)  (0) 2023.01.06
[Java] 애너테이션(Annotation)  (0) 2023.01.06
[Java] Map<K, V>  (1) 2023.01.04
[Java] Set<E>  (0) 2023.01.04
[Java] List<E>  (0) 2023.01.04