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> names = new LinkedList<>();
names.add("Rams");
names.add("Posa");
names.add("Chinni");
// Getting ListIterator
ListIterator<String> 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> names = new LinkedListt<>();
names.add("Rams");
names.add("Posa");
names.add("Chinni");
// Getting ListIterator
ListIterator<String> 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순방향 반복을 지원하려면 다음 방법을 사용해야 합니다.
- hasNext())
- 다음()
- nextIndex()
- 역방향 반복 방법\n역방향 반복을 지원하려면 다음 방법을 사용해야 합니다.
- hasPrevious()
- 이전()
- 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 문서