logo

Java의 반복자

자바에서는 반복자 Java 커서 중 하나입니다. 자바 반복자 Java 개체 구성 요소 모음 전체를 하나씩 반복하기 위해 실행되는 인터페이스입니다. Java 1.2 Collection 프레임워크 이후 Java 프로그래밍 언어에서 무료로 사용할 수 있습니다. java.util 패키지에 속합니다.

Java Iterator는 Java 1.2에 도입되었지만 여전히 Collection 객체의 요소를 탐색하는 데 사용할 수 있는 가장 오래된 도구는 아닙니다. Java 프로그래밍 언어에서 가장 오래된 Iterator는 Enumerator 이전 Iterator입니다. Java Iterator 인터페이스는 ArrayList와 같은 일부 액세스 가능한 컬렉션을 탐색하기 위해 처음에 실행되었던 열거자 반복자를 계승합니다.

Java Iterator는 다음과 같이 알려져 있습니다. 범용 커서 Collection 프레임워크의 모든 클래스에 적합하기 때문입니다. Java Iterator는 READ 및 REMOVE와 같은 작업에도 도움이 됩니다. Java Iterator 인터페이스를 열거형 반복자 인터페이스와 비교할 때 Java Iterator에서 사용할 수 있는 메소드 이름이 더 정확하고 사용하기 쉽다고 말할 수 있습니다.

Java Iterator의 장점

Java의 Iterator는 수많은 장점으로 인해 널리 보급되었습니다. Java Iterator의 장점은 다음과 같습니다.

자바 정규식에서
  • 사용자는 이러한 반복자를 컬렉션 프레임워크의 모든 클래스에 적용할 수 있습니다.
  • Java Iterator에서는 읽기 및 제거 작업을 모두 사용할 수 있습니다.
  • 사용자가 for 루프를 사용하여 작업하는 경우 컬렉션을 현대화(추가/제거)할 수 없지만 Java Iterator를 사용하는 경우 컬렉션을 업데이트하기만 하면 됩니다.
  • Java Iterator는 Collection API의 범용 커서로 간주됩니다.
  • Java Iterator의 메소드 이름은 매우 쉽고 사용하기도 매우 간단합니다.

Java Iterator의 단점

수많은 장점에도 불구하고 Java Iterator에는 다양한 단점도 있습니다. Java Iterator의 단점은 다음과 같습니다.

  • Java Iterator는 순방향의 반복만 유지합니다. 간단히 말해서 Java Iterator는 단방향 Iterator입니다.
  • 새 구성 요소의 교체 및 확장은 Java Iterator에서 승인되지 않습니다.
  • CRUD 작업에서 Java Iterator는 CREATE 및 UPDATE와 같은 다양한 작업을 보유하지 않습니다.
  • Spliterator와 비교하여 Java Iterator는 병렬 패턴의 순회 요소를 지원하지 않습니다. 이는 Java Iterator가 순차 반복만 지원함을 의미합니다.
  • Spliterator와 비교하여 Java Iterator는 대량의 데이터를 탐색하기 위한 보다 안정적인 실행을 지원하지 않습니다.

Java Iterator를 사용하는 방법은 무엇입니까?

사용자가 Java Iterator를 사용해야 하는 경우 탐색하려는 객체 컬렉션에서 Iterator 인터페이스의 인스턴스를 만드는 것이 필수입니다. 그 후, 수신된 Iterator는 사용자가 객체 컬렉션의 각 요소를 탐색할 수 있도록 기본 컬렉션의 구성 요소 추적을 유지합니다.

사용자가 해당 컬렉션으로 이어지는 Iterator를 탐색하는 동안 기본 컬렉션을 수정하는 경우 Iterator는 일반적으로 이를 승인하고 다음에 사용자가 Iterator에서 다음 구성 요소를 가져오려고 시도할 때 예외를 발생시킵니다.

김프에서 어떻게 선택을 취소하나요?

Java 반복자 메서드

다음 그림은 Java Iterator 인터페이스의 클래스 다이어그램을 완벽하게 표시합니다. 여기에는 다음과 같은 총 4가지 방법이 포함되어 있습니다.

  • 해즈다음()
  • 다음()
  • 제거하다()
  • forEachRemaining()

그만큼 forEachRemaining() 메소드는 Java 8에 추가되었습니다. 각 메소드에 대해 자세히 논의해 보겠습니다.

    부울 hasNext(): 이 메서드는 어떤 매개변수도 허용하지 않습니다. 반복에 더 많은 요소가 남아 있으면 true를 반환합니다. 더 이상 요소가 남아 있지 않으면 false를 반환합니다.
    반복에 더 이상 요소가 남아 있지 않으면 next() 메서드를 호출할 필요가 없습니다. 간단히 말해서, 이 메소드는 next() 메소드를 호출할지 여부를 결정하는 데 사용된다고 말할 수 있습니다.E 다음():hasNext() 메소드와 유사합니다. 또한 어떤 매개변수도 허용하지 않습니다. 이는 순회에서 다음 요소인 E를 반환합니다. 반복 또는 객체 컬렉션에 반복할 요소가 더 이상 남아 있지 않으면 NoSuchElementException이 발생합니다.기본 무효 제거():이 방법에는 매개변수도 필요하지 않습니다. 이 메소드에는 반환 유형이 없습니다. 이 메서드의 주요 기능은 기본 컬렉션을 순회하는 반복기가 반환한 마지막 요소를 제거하는 것입니다. 제거() 메소드는 다음() 메소드 호출마다 거의 한 번만 요청될 수 없습니다. 반복자가 제거 작업을 지원하지 않으면 UnSupportedOperationException이 발생합니다. 또한 다음 메서드가 아직 호출되지 않은 경우에도 IllegalStateException이 발생합니다.기본 무효 forEachRemaining(소비자 조치):매개변수를 취하는 Java Iterator의 유일한 메소드입니다. 작업을 매개변수로 허용합니다. 행동은 수행되어야 할 것 외에는 아무 것도 아닙니다. 메소드의 반환 유형이 없습니다. 이 메서드는 모든 구성 요소가 소비되거나 작업에서 예외가 발생할 때까지 컬렉션의 모든 왼쪽 구성 요소에 대해 특정 작업을 수행합니다. 작업에 의해 발생한 예외는 호출자에게 전달됩니다. 작업이 null이면 NullPointerException이 발생합니다.

Java 반복자의 예

이제 Java Iterator 인터페이스의 장점을 설명하기 위해 Java 프로그램을 실행할 차례입니다. 아래 코드는 도시 이름의 ArrayList를 생성합니다. 그런 다음 ArrayList의 iterator() 메서드를 적용하여 반복자를 초기화합니다. 그런 다음 목록을 순회하여 각 요소를 나타냅니다.

JavaIteratorExample.java

 import java.io.*; import java.util.*; public class JavaIteratorExample { public static void main(String[] args) { ArrayList cityNames = new ArrayList(); cityNames.add('Delhi'); cityNames.add('Mumbai'); cityNames.add('Kolkata'); cityNames.add('Chandigarh'); cityNames.add('Noida'); // Iterator to iterate the cityNames Iterator iterator = cityNames.iterator(); System.out.println('CityNames elements : '); while (iterator.hasNext()) System.out.print(iterator.next() + ' '); System.out.println(); } } 

산출:

 CityNames elements: Delhi Mumbai Kolkata Chandigarh Noida 

기억해야 할 점

  • Java Iterator는 Java 1.2 Collection 프레임워크의 Java 프로그래밍 언어에 추가된 인터페이스입니다. java.util 패키지에 속합니다.
  • 컬렉션 프레임워크의 객체를 순회하기 위해 실행되는 Java 커서 중 하나입니다.
  • Java Iterator는 컬렉션 개체의 구성 요소를 하나씩 반복하는 데 사용됩니다.
  • Java Iterator는 Collection 프레임워크의 모든 클래스에 적합하므로 Java의 범용 커서라고도 합니다.
  • Java Iterator는 READ 및 REMOVE와 같은 작업도 지원합니다.
  • Iterator 클래스의 메소드 이름은 Enumeration Iterator의 메소드 이름에 비해 매우 간단하고 사용하기 쉽습니다.