JavaのListIteratorは、JavaのListIteratorです。

私たちはJavaには4種類のカーソルがあることを知っています。Enumeration、Iterator、ListIterator、およびSpliteratorです。私は以前の投稿でEnumerationとIteratorのカーソルについてすでに説明しましたので、この投稿を読む前に、Java Iteratorで私の前の投稿をお読みください。この投稿では、3番目のJavaカーソルであるListIteratorについて議論します。

Java の ListIterator

リストイテレータはJavaのイテレータであり、リスト実装オブジェクトから要素を1つずつ反復処理するために使用されます。

  • It is available since Java 1.2.
  • It extends Iterator interface.
  • It is useful only for List implemented classes.
  • Unlike Iterator, It supports all four operations: CRUD (CREATE, READ, UPDATE and DELETE).
  • Unlike Iterator, It supports both Forward Direction and Backward Direction iterations.
  • It is a Bi-directional Iterator.
  • It has no current element; its cursor position always lies between the element that would be returned by a call to previous() and the element that would be returned by a call to next().

コレクションAPIにおけるCRUD操作とは何ですか?

  • CREATE: Adding new elements to Collection object.
  • READ: Retrieving elements from Collection object.
  • UPDATE: Updating or setting existing elements in Collection object.
  • DELETE: Removing elements from Collection object.

JavaのListIteratorクラスのダイアグラム

Java ListIterator

JavaのListIteratorメソッド

JavaのListIteratorインターフェースには、以下のメソッドがあります。

  • void add(E e): Inserts the specified element into the list.
  • boolean hasNext(): Returns true if this list iterator has more elements when traversing the list in the forward direction.
  • boolean hasPrevious(): Returns true if this list iterator has more elements when traversing the list in the reverse direction.
  • E next(): Returns the next element in the list and advances the cursor position.
  • int nextIndex(): Returns the index of the element that would be returned by a subsequent call to next().
  • E previous(): Returns the previous element in the list and moves the cursor position backwards.
  • int previousIndex(): Returns the index of the element that would be returned by a subsequent call to previous().
  • void remove(): Removes from the list the last element that was returned by next() or previous().
  • void set(E e): Replaces the last element returned by next() or previous() with the specified element.

次のセクションでは、役立つ例を交えながら、これらの方法を一つずつ探っていきます。

Javaの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のメソッドが前方向と後方向の反復を行う方法を探求します。

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 イテレータの種類

私たちが知っているように、Javaには4つのカーソルがあります。それらはEnumeration、Iterator、ListIterator、およびSpliteratorです。以下に示すように、それらを2つの主なタイプに分類することができます。

  • Uni-Directional Iterators
    They are Cursors which supports only Forward Direction iterations. For instance, Enumeration, Iterator, etc. are Uni-Directional Iterators.- Bi-Directional Iterators
    They are Cursors which supports Both Forward Direction and Backward Direction iterations. For instance, ListIterator is Bi-Directional Iterator.
java cursor types

JavaのListIteratorは内部的にどのように機能しますか?

私たちが知っているように、JavaのListIteratorは正方向と逆方向の両方で動作することを意味します。これは双方向イテレータです。この機能をサポートするために、2つのメソッドセットがあります。

  • Forward Direction Iteration methods
    We need to use the following methods to support Forward Direction Iteration:
    1. hasNext()

 

    1. 次()

 

    次のインデックス()
  • Backward Direction Iteration methods
    We need to use the following methods to support Backward Direction Iteration:
    1. 前の要素があるか確認する(hasPrevious())

 

    1. 前の要素を取得する(previous())

 

    前の要素のインデックスを取得する(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();
List Iterator in Java
namesIterator.hasNext();
namesIterator.next();
ListIterator backward traversing
namesIterator.hasPrevious();
namesIterator.previous();
ListIterator cursor diagram
namesIterator.hasPrevious();
ListIterator traversing

ListIteratorの利点

イテレーターとは異なり、リストイテレーターには以下の利点があります。

  • Like Iterator, it supports READ and DELETE operations.
  • It supports CREATE and UPDATE operations too.
  • That means, it supports CRUD operations: CREATE, READ, UPDATE and DELETE operations.
  • It supports both Forward direction and Backward direction iteration. That means it’s a Bi-Directional Java Cursor.
  • Method names are simple and easy to use them.

ListIteratorの制約

Iteratorに比べて、JavaのListIteratorは多くの利点を持っています。ただし、以下にいくつかの制限があります。

  • It is an Iterator only List implementation classes.
  • Unlike Iterator, it is not applicable for whole Collection API.
  • It is not a Universal Java Cursor.
  • Compare to Spliterator, it does NOT support Parallel iteration of elements.
  • Compare to Spliterator, it does NOT support better performance to iterate large volume of data.

IteratorとListIteratorの類似点

このセクションでは、Javaの2つのカーソル、IteratorとListIteratorの類似点について話し合います。

  • Bother are introduced in Java 1.2.
  • Both are Iterators used to iterate Collection or List elements.
  • Both supports READ and DELETE operations.
  • Both supports Forward Direction iteration.
  • Both are not Legacy interfaces.

イテレータとリストイテレータの違い

このセクションでは、Javaの2つのイテレーター、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ドキュメント。

コメントを残す 0

Your email address will not be published. Required fields are marked *