웹사이트 검색

Java ListIterator - Java의 ListIterator


아시다시피 Java에는 Enumeration, Iterator, ListIterator 및 Spliterator의 네 가지 커서가 있습니다. 이전 게시물에서 Enumeration 및 Iterator 커서에 대해 이미 논의했습니다. 이 게시물을 살펴보기 전에 이전 게시물(Java Iterator)을 살펴보세요. 이 게시물에서는 세 번째 Java 커서인 ListIterator에 대해 설명합니다.

자바 ListIterator

Iterator와 마찬가지로 ListIterator는 List 구현 객체에서 요소를 하나씩 반복하는 데 사용되는 Java Iterator입니다.

  • Java 1.2부터 사용 가능합니다.
  • Iterator 인터페이스를 확장합니다.
  • List 구현 클래스에만 유용합니다.
  • Iterator와 달리 CRUD(CREATE, READ, UPDATE 및 DELETE)의 네 가지 작업을 모두 지원합니다.
  • Iterator와 달리 Forward Direction과 Backward Direction 반복을 모두 지원합니다.
  • 양방향 Iterator입니다.
  • 현재 요소가 없습니다. 커서 위치는 항상 previous() 호출로 반환되는 요소와 next() 호출로 반환되는 요소 사이에 있습니다.

참고:- Collection API에서 CRUD 작업이란 무엇입니까?

  • 만들기: 컬렉션 개체에 새 요소를 추가합니다.
  • 읽기: 컬렉션 개체에서 요소를 검색하는 중입니다.
  • UPDATE: 컬렉션 개체의 기존 요소를 업데이트하거나 설정합니다.
  • DELETE: 컬렉션 개체에서 요소를 제거합니다.

Java ListIterator 클래스 다이어그램

자바 ListIterator 메서드

Java ListIterator 인터페이스에는 다음과 같은 메소드가 있습니다.

  • void add(E e): 지정된 요소를 목록에 삽입합니다.
  • 부울 hasNext(): 이 목록 반복자가 정방향으로 목록을 순회할 때 더 많은 요소를 포함하는 경우 true를 반환합니다.
  • boolean hasPrevious(): 목록을 역방향으로 순회할 때 이 목록 반복자가 더 많은 요소를 가지고 있으면 true를 반환합니다.
  • E next(): 목록의 다음 요소를 반환하고 커서 위치를 이동합니다.
  • int nextIndex(): next()에 대한 후속 호출에 의해 반환될 요소의 인덱스를 반환합니다.
  • E previous(): 목록의 이전 요소를 반환하고 커서 위치를 뒤로 이동합니다.
  • int previousIndex(): previous()에 대한 후속 호출에 의해 반환될 요소의 인덱스를 반환합니다.
  • void remove(): next() 또는 previous()에 의해 반환된 마지막 요소를 목록에서 제거합니다.
  • void set(E e): next() 또는 previous()에 의해 반환된 마지막 요소를 지정된 요소로 바꿉니다.

다음 섹션에서 유용한 예제와 함께 이러한 방법을 하나씩 살펴보겠습니다.

자바 ListIterator 기본 예제

이 섹션에서는 몇 가지 예제와 함께 몇 가지 ListIterator 메서드에 대해 설명합니다. 먼저 이 반복자 개체를 가져오는 방법을 이해해야 합니다. ListIterator를 얻는 방법?

ListIterator<E> listIterator()

이 목록의 요소에 대한 목록 반복자를 반환합니다. 예:-

import java.util.*;

public class ListIteratorDemo 
{
  public static void main(String[] args) 
  {
	List<String&gt names = new LinkedList<>();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
		
	// Getting ListIterator
	ListIterator<String&gt namesIterator = names.listIterator();
	
	// Traversing elements
	while(namesIterator.hasNext()){
	   System.out.println(namesIterator.next());			
	}	

	// Enhanced for loop creates Internal Iterator here.
	for(String name: names){
	   System.out.println(name);			
	}	
  }
}

산출:-

Rams
Posa
Chinni

ListIterator 양방향 반복 예제

섹션에서는 순방향 및 역방향 반복을 수행하기 위해 ListIterator의 메서드가 작동하는 방식을 살펴봅니다.

import java.util.*;

public class BiDirectinalListIteratorDemo 
{
	public static void main(String[] args) 
	{
		List<String&gt names = new LinkedListt<>();
		names.add("Rams");
		names.add("Posa");
		names.add("Chinni");
		
		// Getting ListIterator
		ListIterator<String&gt listIterator = names.listIterator();
		
		// Traversing elements
		System.out.println("Forward Direction Iteration:");
		while(listIterator.hasNext()){
			System.out.println(listIterator.next());			
		}	
		
		// Traversing elements, the iterator is at the end at this point
		System.out.println("Backward Direction Iteration:");
		while(listIterator.hasPrevious()){
			System.out.println(listIterator.previous());			
		}
	}
}

산출:-

Forward Direction Iteration:
Rams
Posa
Chinni
Backward Direction Iteration:
Chinni
Posa
Rams

자바 반복자의 유형

아시다시피 Java에는 Enumeration, Iterator, ListIterator 및 Spliterator의 네 가지 커서가 있습니다. 아래와 같이 두 가지 주요 유형으로 분류할 수 있습니다.

  • 단방향 반복자\n정방향 반복만 지원하는 커서입니다. 예를 들어 열거형, 반복자 등은 단방향 반복자입니다.- 양방향 반복자\n순방향 및 역방향 반복을 모두 지원하는 커서입니다. 예를 들어 ListIterator는 양방향 반복자입니다.

Java ListIterator는 내부적으로 어떻게 작동합니까?

아시다시피 Java ListIterator는 양방향으로 작동합니다. 즉, 정방향과 역방향 모두에서 작동합니다. 양방향 반복자입니다. 이 기능을 지원하기 위해 두 가지 방법 집합이 있습니다.

  • 순방향 반복 방법\n순방향 반복을 지원하려면 다음 방법을 사용해야 합니다.

  1. hasNext())
  2. 다음()
  3. nextIndex()

  • 역방향 반복 방법\n역방향 반복을 지원하려면 다음 방법을 사용해야 합니다.

  1. hasPrevious()
  2. 이전()
  3. previousIndex()

이전 게시물에서 우리는 \How Java Iterator Works Internally?\에서 Iterator가 내부적으로 Forwarding Direction에서 어떻게 작동하는지 이미 논의했습니다. ListIterator도 같은 방식으로 작동합니다. 이전 게시물을 보려면 여기를 클릭하십시오: Java Iterator. 이 섹션에서는 ListIterator가 Backward Direction에서 작동하는 방식에 대해 설명합니다. 다음 LinkedList 개체를 사용하여 이해하겠습니다. 이 기능.

List<String> names = new LinkedList<>();
names.add("E-1");
names.add("E-2");
names.add("E-3");
.
.
.
names.add("E-n");

이제 아래와 같이 LinkedList에 ListIterator 객체를 만듭니다.

ListIterator<String> namesIterator = names.listLterator();
namesIterator.hasNext();
namesIterator.next();
namesIterator.hasPrevious();
namesIterator.previous();
namesIterator.hasPrevious();

ListIterator의 장점

Iterator와 달리 ListIterator에는 다음과 같은 장점이 있습니다.

  • Iterator와 마찬가지로 READ 및 DELETE 작업을 지원합니다.
  • CREATE 및 UPDATE 작업도 지원합니다.
  • 즉, CREATE, READ, UPDATE 및 DELETE 작업과 같은 CRUD 작업을 지원합니다.
  • 정방향 및 역방향 반복을 모두 지원합니다. 이는 양방향 자바 커서라는 의미입니다.
  • 메서드 이름은 간단하고 사용하기 쉽습니다.

ListIterator의 한계

Iterator와 비교할 때 Java ListIterator에는 많은 장점이 있습니다. 그러나 여전히 다음과 같은 몇 가지 제한 사항이 있습니다.

  • Iterator 전용 List 구현 클래스입니다.
  • Iterator와 달리 전체 Collection API에 적용되지 않습니다.
  • Universal Java Cursor가 아닙니다.
  • Spliterator와 비교하면 요소의 병렬 반복을 지원하지 않습니다.
  • Spliterator와 비교하면 대용량 데이터를 반복하는 데 더 나은 성능을 지원하지 않습니다.

Iterator와 ListIterator의 유사점

이 섹션에서는 Java 두 커서인 Iterator와 ListIterator 사이의 유사성에 대해 설명합니다.

  • Bother는 Java 1.2에서 도입되었습니다.
  • 둘 다 Collection 또는 List 요소를 반복하는 데 사용되는 Iterator입니다.
  • 둘 다 READ 및 DELETE 작업을 지원합니다.
  • 둘 다 정방향 반복을 지원합니다.
  • 둘 다 레거시 인터페이스가 아닙니다.

반복자와 ListIterator의 차이점

이 섹션에서는 Java Two Iterators(Iterator와 ListIterator)의 차이점에 대해 설명합니다.

Iterator ListIterator
Introduced in Java 1.2. Introduced in Java 1.2.
It is an Iterator for whole Collection API. It is an Iterator for only List implemented classes.
It is an Universal Iterator. It is NOT an Universal Iterator.
It supports only Forward Direction Iteration. It supports both Forward and Backward Direction iterations.
It’s a Uni-Directional Iterator. It’s a Bi-Directional Iterator.
It supports only READ and DELETE operations. It supports all CRUD operations.
We can get Iterator by using iterator() method. We can ListIterator object using listIterator() method.

이것이 Java의 ListIterator에 관한 전부입니다. 이 Java ListIterator 이론과 예제가 ListIterator 프로그래밍을 시작하는 데 도움이 되기를 바랍니다. 참조: ListIterator API 문서