Java ListIterator – Java에서의 ListIterator

우리는 Java에 네 가지 커서가 있다는 것을 알고 있습니다: Enumeration, Iterator, ListIterator 및 Spliterator. 이전 포스트에서 Enumeration 및 Iterator 커서에 대해 이미 논의했습니다. 이 게시물을 읽기 전에 이전 게시물을 확인하십시오: Java Iterator. 이 게시물에서는 세 번째 Java 커서에 대해 논의할 것입니다: ListIterator.

Java ListIterator

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

  • Java 1.2 이후로 사용할 수 있습니다.
  • Iterator 인터페이스를 확장합니다.
  • List 구현 클래스에만 유용합니다.
  • Iterator와 달리 CRUD(생성, 읽기, 업데이트 및 삭제) 네 가지 작업을 모두 지원합니다.
  • Iterator와 달리 앞뒤 방향 반복을 지원합니다.
  • 양방향 Iterator입니다.
  • 현재 요소가 없으며, 커서 위치는 항상 previous() 호출에 의해 반환되는 요소와 next() 호출에 의해 반환되는 요소 사이에 있습니다.

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

  • CREATE: Collection 객체에 새 요소 추가.
  • READ: Collection 객체에서 요소 검색.
  • 업데이트: Collection 객체에서 기존 요소를 업데이트하거나 설정합니다.
  • 삭제: Collection 객체에서 요소를 제거합니다.

Java ListIterator 클래스 다이어그램

Java에서 ListIterator는 Collection API의 인터페이스입니다. Iterator 인터페이스를 확장합니다. 전방 및 후방 반복 및 CRUD 작업을 지원하기 위해 다음과 같은 메서드가 있습니다. ArrayList, CopyOnWriteArrayList, LinkedList, Stack, Vector 등과 같은 모든 List 구현 클래스에이 Iterator를 사용할 수 있습니다. 다음 섹션에서 이러한 메서드를 자세히 살펴보겠습니다. 일부 유용한 메서드도 함께 제공됩니다.

Java ListIterator 메서드

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

  • void add(E e): 지정된 요소를 목록에 삽입합니다.
  • boolean hasNext(): 전방 방향으로 목록을 탐색할 때이 목록 반복자에 더 많은 요소가있는 경우 true를 반환합니다.
  • boolean hasPrevious(): 역방향으로 목록을 탐색할 때이 목록 반복자에 더 많은 요소가있는 경우 true를 반환합니다.
  • E next(): Returns the next element in the list and advances the cursor position.
  • int nextIndex(): 다음 next() 호출에 의해 반환될 요소의 인덱스를 반환합니다.
  • E previous(): Returns the previous element in the list and moves the cursor position backwards.
  • int previousIndex(): 이전() 호출에 의해 반환될 요소의 인덱스를 반환합니다.
  • void remove(): 다음() 또는 previous()에 의해 마지막으로 반환된 요소를 목록에서 제거합니다.
  • void set(E e): 다음() 또는 previous()에 의해 마지막으로 반환된 요소를 지정된 요소로 바꿉니다.

이후 섹션에서는 유용한 예제와 함께 이러한 메서드를 하나씩 살펴보겠습니다.

Java ListIterator 기본 예제

이 섹션에서는 몇 가지 ListIterator 메서드에 대해 몇 가지 예제를 살펴보겠습니다. 먼저이 반복자 객체를 얻는 방법에 대해 이해해야 합니다. ListIterator를 어떻게 얻을까요?

ListIterator<E> listIterator()

이 목록의 요소 위에있는 목록 반복자를 반환합니다. 예제:-

import java.util.*;

public class ListIteratorDemo 
{
  public static void main(String[] args) 
  {
	List();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
		
	// ListIterator 얻기
	ListIterator<String> namesIterator = names.listIterator();
	
	// 요소 트래버스
	while(namesIterator.hasNext()){
	   System.out.println(namesIterator.next());			
	}	

	// 여기에서 내부 반복자를 만듭니다. 향상된 for 루프.
	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();
		names.add("Rams");
		names.add("Posa");
		names.add("Chinni");
		
		// ListIterator 가져오기
		ListIterator<String> listIterator = names.listIterator();
		
		// 요소 트래버스
		System.out.println("Forward Direction Iteration:");
		while(listIterator.hasNext()){
			System.out.println(listIterator.next());			
		}	
		
		// 요소 트래버스, 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 반복자 유형

우리가 알다시피 Java에는 네 가지 커서가 있습니다: Enumeration, Iterator, ListIterator 및 Spliterator. 이를 아래에 표시된 두 가지 주요 유형으로 분류할 수 있습니다:

  • 단방향 반복자
    전방 반복만 지원하는 커서입니다. 예를 들어, Enumeration, Iterator 등이 있습니다.- 양방향 반복자
    전방 및 후방 반복을 모두 지원하는 커서입니다. 예를 들어, ListIterator는 양방향 반복자입니다.

Java ListIterator의 내부 작동 방식은?

우리가 알다시피 Java ListIterator는 양방향으로 작동합니다. 즉, 전방 및 후방 방향으로 작동합니다. 이는 양방향 반복자입니다. 이 기능을 지원하기 위해 두 세트의 메서드가 있습니다.

  • 전방 반복 방법
    전방 반복을 지원하기 위해 다음 메서드를 사용해야 합니다:
  1. hasNext())
  2. next()
  3. nextIndex()
  • 후방 반복 방법
    후방 반복을 지원하기 위해 다음 메서드를 사용해야 합니다:
  1. hasPrevious()
  2. previous()
  3. previousIndex()

이전 게시물에서 “Java Iterator의 내부 작동 방식” 섹션에서 Iterator가 내부적으로 전진 방향으로 작동하는 방법에 대해 이미 설명했습니다. 심지어 ListIterator도 같은 방식으로 작동합니다. 이전 게시물을 확인하려면 여기를 클릭하세요: Java Iterator. 이 섹션에서는 ListIterator가 후방 방향으로 작동하는 방법에 대해 설명하겠습니다. 다음 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” ListIterator가 다음과 같이 보인다고 가정해 봅시다: 여기서 ListIterator의 커서는 목록의 첫 번째 요소 앞을 가리킵니다. 이제 다음 코드 스니펫을 while 루프에서 실행합니다.

namesIterator.hasNext();
namesIterator.next();

위의 코드 스니펫을 while 루프에서 실행하면 ListIterator의 커서가 LinkedList의 마지막 요소를 가리킵니다. 그런 다음 다음 코드 스니펫을 실행하여 끝에서 시작까지 순회를 시작할 수 있습니다.

namesIterator.hasPrevious();
namesIterator.previous();

위의 코드 스니펫을 실행하면 ListIterator의 커서는 위의 다이어그램에 표시된대로 List의 “마지막에서 두 번째” 요소를 가리킵니다. LinkedList의 첫 번째 요소에 ListIterator의 커서를 이동하기 위해이 프로세스를 수행하십시오. 첫 번째 요소를 읽은 후 아래의 코드 스니펫을 실행하면 “false”값을 반환합니다.

namesIterator.hasPrevious();

ListIterator의 커서가 LinkedList의 첫 번째 요소 앞에 위치하므로 hasPrevious() 메서드는 false 값을 반환합니다. 이 모든 다이어그램을 관찰한 후에는 Java ListIterator가 아래의 다이어그램에 표시된대로 양방향 반복을 지원한다고 말할 수 있습니다. 그래서 이것은 양방향 커서로도 알려져 있습니다. 정방향 ListIterator 역방향 ListIterator

ListIterator의 장점

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

  • Iterator와 마찬가지로 읽기 및 삭제 작업을 지원합니다.
  • 생성 및 업데이트 작업도 지원합니다.
  • 그것은 CRUD 작업을 지원한다는 것을 의미합니다. CREATE, READ, UPDATE, DELETE 작업을 지원합니다.
  • 전진 방향 및 후진 방향 반복을 지원합니다. 즉, 양방향 Java 커서입니다.
  • 메소드 이름은 간단하고 사용하기 쉽습니다.

ListIterator의 제한사항

Iterator와 비교하여, Java ListIterator는 많은 장점을 가지고 있습니다. 그러나 아래와 같은 몇 가지 제한사항이 있습니다.

  • 이것은 Iterator만 지원하는 List 구현 클래스입니다.
  • Iterator와 달리 전체 Collection API에 적용할 수 없습니다.
  • 일반적인 Java 커서가 아닙니다.
  • Spliterator와 비교하여, 요소들의 병렬 반복을 지원하지 않습니다.
  • Spliterator와 비교하여, 대량 데이터를 반복하는 데 더 나은 성능을 지원하지 않습니다.

Iterator와 ListIterator의 유사점

이 섹션에서는 Java의 두 가지 커서인 Iterator와 ListIterator의 유사점에 대해 논의하겠습니다.

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

Iterator와 ListIterator의 차이점

이 섹션에서는 Java 두 개의 반복자인 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 문서

Source:
https://www.digitalocean.com/community/tutorials/java-listiterator