Java/Java

Java 컬렉션 프레임워크 Iterator

검은고양이개발자 2023. 1. 14. 16:20
반응형

 

Iterator 란 무엇일까요?


 

Iterator란 자바의 컬렉션(Collection)에 저장되어 있는 요소들을 순회하는 인터페이스입니다.

즉, Collection을 상속받는 List와 Set 인터페이스에서도 사용가능하다는 얘기입니다.

 

Iterator 에는 아래와 같이 총 세 가지 메서드가  있습니다.

 

  1. 다음 요소가 있는지 판단하는 boolean 타입의 hasNext()
  2. 다음 요소를 가져오는  next(),             
  3. 가져온 요소를 삭제하는 remove() 

 

next() 메서드와 remove()는 단독으로 사용할 수 없으며

꼭 hasNext() -> next() -> remove() 단계로 사용해야 사용할 수 있습니다.

ArrayList<Integer> list = new ArrayList<>();
 for (int i = 1; i <= 3; i++) {
     list.add(i);
 }
 System.out.println(list.size());
 System.out.println();

Iterator<Integer> iterator = list.iterator();
 while(iterator.hasNext()){
     int num = iterator.next();
     iterator.remove();
     System.out.println(num);
 }
 System.out.println();
 System.out.println(list.size());
 // 호출
3 --> list 요소의 개수

1
2
3

0 --> list 요소의 개수

위의 코드는 Integer 타입을 가진 ArrayList 클래스의 객체를 만들고

list에 1,2,3이라는 요소들을 넣은 뒤 그 list에 Iterator을 활용한 코드입니다.

 

hasNext()는 boolean 타입이며, 다음요소가 존재하는지 판단하는 메서드이기 때문에 list의 요소 수만큼 반복되고

next() 메서드를 통해 list의 요소는 num으로 정의됩니다.

그리고 remove() 메서드는 next()를 통해 읽어온 객체를 삭제합니다.

 

그런데 이때 remove() 메서드를 사용하게 되면 list 안의 있는 요소들이 실제로 삭제가 됩니다.

위 코드에서 iterator 메서드가 실행되기 전, 후의 list.size()를 비교해 보면 알 수 있습니다.!

 

 

반응형