울음참고 개발공부
article thumbnail
Published 2023. 7. 19. 10:05
Iterator 2.Container
728x90

 

 

Iterator 란

 

 

 

 

Iterator

 

" Java 에서 Iterator 는 리스트나 맵 등의 컬렉션 요소를 반복적으로 접근하고 삭제하기 위한 인터페이스이다. "

 

 

 

 

 

Iterator는 컬렉션의 내부 구조를 알 필요 없이 간편하게 요소에 접근할 수 있도록 도와줍니다.
Iterator는 java.util 패키지에 속한 인터페이스로, 다음과 같은 세 가지 주요 메서드를 제공합니다:

 

 

 

http://www.tcpschool.com/java/java_collectionFramework_iterator

 

 

 

  • E next
    • 'hasNext()' 메서드로 요소의 존재를 확인한 뒤에 호출
    • 요소가 존재하지 않을 경우 'NoSuchElementException' 예외 발생
  • void remove()
    • 현재 반복 중인 요소를 삭제
    • 이 메서드를 호출하기 전에 'next()' 메서드로 요소를 가져와야함
    • remove() 메서드는 반복 중에 한번만 호출 할 수 있음
    • 컬렉션에서 요소를 직접 삭제하는 것과 달리, Iterator 를 통해 요소를 삭제하면 컬렉션의 구조가 올바르게 유지

 

 

Iterator 의 사
Iterator를 사용하면 컬렉션의 요소를 순차적으로 접근하면서 컬렉션을 수정할 수 있습니다.
이는 일반적인 for 루프나 인덱스를 사용하는 것보다 더 유연하고 안전한 방법입니다.
Iterator를 통해 컬렉션을 순회하면서 필요한 경우 요소를 제거할 수 있습니다.

 

 

 


 

 

import java.util.ArrayList;
import java.util.Iterator;

public class IteratorExample {
    public static void main(String[] args) {
        // ArrayList 생성
        ArrayList<String> fruits = new ArrayList<>();
        fruits.add("사과");
        fruits.add("바나나");
        fruits.add("딸기");
        fruits.add("오렌지");

        // Iterator 생성
        Iterator<String> iterator = fruits.iterator();

        // hasNext()와 next()를 사용하여 요소에 접근
        while (iterator.hasNext()) {
            String fruit = iterator.next();
            System.out.println(fruit);
        }

        // remove()를 사용하여 요소 삭제
        iterator = fruits.iterator(); // 새로운 Iterator 생성 (초기화)
        while (iterator.hasNext()) {
            String fruit = iterator.next();
            if (fruit.equals("바나나")) {
                iterator.remove();
            }
        }

        // 삭제 후의 ArrayList 출력
        System.out.println(fruits);
    }
}

 

 

사과
바나나
딸기
오렌지
[사과, 딸기, 오렌지]

 

 

 


 

Iterator 의 주요 사용 목적 및 특징

 

 

 

Iterator 의 사용 목적

 

 

1. 요소의 순차적 접근

 

Iterator  를 사용하면 컬렉션의 요소를 순차적으로 접근할 수 있음

-> 컬렉션의 내부 구조에 대해 알 필요 없이 요소에 접근할 수 있어서 편리함

 

 

2. 요소의 안전한 삭제

 

Iterator 를 통해 요소를 안전하게 삭제할 수 있어 컬렉션의 구조가 올바르게 유지됨

* 일반적인 for루프에서 컬렉션을 순회하면서 요소를 삭제하면 예외가 발생하거나 예상치 못한 동작이 발생할 수 있음

 

 

3. 동시 수정 방지

 

Iterator를 통해 순회하는 동안 다른 스레드에서 컬렉션을 수정하는 것을 방지함

-> 컬렉션의 구조가 변경되지 않도록 보장

 

 

 


 

 

 

Iterator의 주요 특징

 

 

 

1. 단방향 순회 

 

Iterator 는 순방향으로만 이동할 수 있기 때문에 이전 요소로 돌아가거나 뒤로 이동하는 경우보다는 순차적인 단방향 순회에 적합함

 

 

2. 요소 삭제 가능

 

remove() 메서드를 호출하여 현재 반복 중인 요소를 삭제할 수 있음

컬렉션에서 요소를 직접삭제하는 것과 달리 안전하고 정확한 삭제를 보장함

 

 

3. 예외 발생 가능

 

NoSuchElementException 예외가 발생할 수 있음

 

next() 메서드를 호출하기 전에 hasNext() 메서드로 다음 요소의 존재 여부를 확인해야함 

또한 remove() 메서드는 next() 메서드를 호출한 후에만 호출할 수 있음

 

 


 

 

iterator와 listIterator의 차이점

 

 

http://www.tcpschool.com/java/java_collectionFramework_iterator

 

 

 

 

1. 컬렉션 타입

 

  • Iterator 
    • Collection  인터페이스에 정의되어 있는 컬렉션 타입(예: ArrayList, LinkedList)과 함께 사용
  • ListIterator
    • List 인터페이스에 정의되어 있는  List  컬렉션 타입(예: ArrayList, LinkedList)와 함께 사용
    • List 컬렉션에서만 사용할 수 있음

 

 

2. 이동 방향

 

  • Iterator 
    • 단방향으로만 이동하여 이전 요소로 돌아갈 수 없음
  • ListIterator
    • Iterator의 기능을 모두 포함하면서도 양방향으로 이동가능
    • 순차적으로 다음 요소 또는 이전 요소로 이동할 수 있음

 

 

3. 요소 추가/수정

 

  • Iterator
    • 순회 중인 컬렉션에 요소를 삭제할 수는 있지만 요소를 추가하거나 수정할 수 없음
  • ListIterator
    • add() 메서드를 사용하여 현재 위치에 요소를 추가
    • set() 메서드를 사용하여 현재 위치의 요소를 수정

 

 

4. 인덱스 접근

 

  • Iterator
    • 인덱스를 직접적으로 접근하는 기능을 제공하지 않음
  • ListIterator
    • List 컬렉션에서 현재 위치의 인덱스를 확인하고 수정할 수 있는 기능 제공
    • nextIndex() : 다음 요소의 인덱스를 확인
    • previousIndex() : 이전 요소의 인덱스 확인

 

 

요약
Iterator는 모든 Collection 타입에 사용할 수 있고, 단방향으로만 이동하며 요소를 삭제할 수 있습니다.

ListIterator는 List 타입에 사용할 수 있고, 양방향으로 이동하며 요소의 추가/수정도 가능합니다.
ListIterator는 Iterator의 기능을 확장하고 추가적인 기능을 제공합니다

 

 

 

 

 

 

728x90
profile

울음참고 개발공부

@메각이

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!