listiterator interface java with examples
このチュートリアルでは、リストの実装をトラバースするためのJavaのListIteratorインターフェイスについて説明します。 ListIteratorインターフェイスのクラス図とメソッドについて学習します。
Iteratorと同様に、ListIteratorインターフェースは、Javaのリスト実装をトラバースし、リストの要素にアクセスする機能を提供します。
=> ここでJavaトレーニングチュートリアルのA〜Zを確認するには、ここをクリックしてください。
学習内容:
ワイヤレスネットワークトラフィックはスニファでキャプチャできます
JavaのListIteratorインターフェイス
ListIteratorインターフェースの主な特徴のいくつかを以下に示します。
- ListIteratorはJava1.2で導入されました
- ListIteratorは、Iteratorインターフェースのサブインターフェースです。つまり、Iteratorインターフェースから拡張されます。
- ListIteratorは、リストの実装でのみ機能します。
- ListIteratorは、作成、読み取り、更新、削除などのすべての操作をサポートしています。 (総称してCRUD操作と呼ばれます)。
- ListIteratorは双方向のイテレーターであり、順方向と逆方向のイテレーターをサポートします。
- ListIteratorの場合、現在の要素はありません。カーソル位置は、前の()メソッドによって返される要素と次の()メソッドによって返される要素の間の位置を指します。
このチュートリアルでは、このインターフェースについて詳しく説明します。
ListIteratorクラス図
ListIteratorは、CollectionsAPIフレームワークに属するインターフェースです。このインターフェースは、Iteratorインターフェースから拡張されています。 Iteratorインターフェースのメソッドを継承するほかに、双方向の反復とCRUD操作のメソッドもサポートします。
ListIteratorインターフェースのクラス図を以下に示します。
上の図は、ListIteratorインターフェースのクラス図を示しています。次のセクションでは、図に示されている各方法について詳しく説明します。
ListIteratorメソッド
ListIteratorインターフェースは、以下の表に示すように、以下のメソッドを提供します。
メソッド名 | プロトタイプ | 説明 |
---|---|---|
削除する() | void remove() | next()またはprevious()メソッドによって返された最後の要素を削除します。 |
hasNext() | ブールhasNext() | listIteratorに順方向にトラバースする要素が他にもあるかどうかを確認します。 |
次() | E next() | リスト内の次の要素を返します。次に、カーソルを移動して次の要素をポイントします。 |
hasPrevious() | ブール値hasPrevious() | ListIteratorに逆方向/逆方向にさらに要素があるかどうかを確認します。 |
前() | E previous() | リスト内の前の要素を返し、カーソルを後方の1つの位置に移動します。 |
nextIndex() | int nextIndex() | next()メソッドの呼び出しによって返される要素のインデックスを返します。 |
previousIndex() | int previousIndex() | previous()メソッドの呼び出しによって返される要素のインデックスを返します。 |
セブン) | ボイドセット(Eおよび) | next()またはprevious()メソッドによって返された最後の要素を新しい値に置き換えます。 |
追加(E) | void add(E e) | リストに新しい要素を追加します。 |
次に、これらの各方法について詳しく説明します。
#1)hasNext()
プロトタイプ: ブールhasNext()
パラメーター: NIL
戻り値:
- true =>リストには次の要素があります
- False =>リストに要素がありません
説明: このメソッドは、ListIteratorに順方向にトラバースする要素がまだあるかどうかを確認します。より多くの要素がある場合、このメソッドはtrueを返します。
#2)次()
プロトタイプ: E次()
パラメーター: NIL
戻り値: E =>リストの次の要素。
説明: next()メソッドは、リスト内の次の要素を返し、カーソルを次の要素に移動します。
スローされた例外: NoSuchElementException –ListIteratorに次の要素がない場合。
#3)hasPrevious()
プロトタイプ: boolean hasPrevious()
パラメーター: NIL
戻り値: true => ListIteratorには前の要素があります
説明: ListIteratorに逆方向/逆方向にさらに要素があるかどうかを確認します。
#4)前()
プロトタイプ: E前()
パラメーター: NIL
戻り値: E =>リストの前の要素
説明: このメソッドは、後方に移動しながらリスト内の前の要素を返し、カーソルを後方に移動します。
スローされた例外: NoSuchElementException –ListIteratorに次の要素がない場合。
#5)nextIndex()
プロトタイプ: int nextIndex()
パラメーター: NIL
戻り値: int =>次の()メソッドによって返される要素のインデックス、またはListIteratorがリストの最後にある場合はリストのサイズ。
説明: このメソッドは、次の()メソッドの前に呼び出すことができます。 nextIndex()メソッドは、next()メソッドによって返される要素のインデックスを返します。 ListIteratorがリストの最後にある場合、このメソッドはリストサイズを返します。
#6)previousIndex()
プロトタイプ: int previousIndex()
パラメーター: NIL
戻り値: int =>前の()メソッドによって返される要素のインデックス。ListIteratorがリストの先頭にある場合は-1。
説明: このメソッドは、前の()メソッドの前に呼び出すことができます。 previousIndex()メソッドは、previous()メソッドによって返される要素のインデックスを返します。 ListIteratorがリストの先頭にある場合、メソッドは-1を返します。
#7)削除()
プロトタイプ: ボイド削除()
パラメーター: NIL
戻り値: ボイド
説明: remove()メソッドは、previous()またはnext()メソッドのいずれかによって返された最後の要素を削除します。メソッドremove()の呼び出しは、next()またはprevious()メソッドの呼び出しごとに1回だけ行うことができます。
スローされた例外:
- UnsupportedOperationException –ListIteratorは削除操作をサポートしていません。
- IllegalStateException –現在の操作が不正な状態にある場合、つまり、nextもpreviousもまだ呼び出されていない場合、またはnextまたはpreviousの呼び出し後に呼び出されていない場合、addまたはremoveは呼び出されていません。
#8)セット(E)
プロトタイプ: ボイドセット(Eおよび)
パラメーター: e =>古い要素が置き換えられる新しい要素
戻り値: ボイド
説明: メソッドset()は、前の()メソッドまたは次の()メソッドのいずれかによって返される要素を、引数として渡された新しい値で設定します。このメソッドは、メソッドprevious()またはnext()への最後の呼び出しの後にadd()またはremove()メソッドが呼び出されない場合にのみ呼び出すことができます。
スローされた例外:
- UnsupportedOperationException –ListIteratorは集合演算をサポートしていません。
- ClassCastException –指定された要素がそのクラスのために追加できない場合。
- IllegalArgumentException –追加される要素/引数が違法または無効である場合。
- IllegalStateException –現在の操作が不正な状態にある場合、つまり、nextまたはpreviousがまだ呼び出されていない場合、またはnextまたはpreviousの呼び出し後に、addまたはremoveが呼び出されていない場合。
#9)追加(E)
プロトタイプ: void add(E e)
パラメーター: e =>リストに追加される新しい要素
戻り値: ボイド
次のうち、システムテストの状態にないものはどれですか?
説明: add()メソッドは、リストに新しい要素を追加するために使用されます。要素は、次の()が返される要素の直前、および前の()メソッドが返される要素の後に追加されます。
要素を追加した結果、next()の値を返す変更はありませんが、previous()メソッドは追加された要素のみを返すことに注意してください。
スローされた例外:
- UnsupportedOperationException –ListIteratorはaddメソッドをサポートしていません。
- クラスのために追加できない指定された要素の場合、ClassCastException。
- 追加される要素/引数が無効または無効な場合、IllegalArgumentException。
次のJavaプログラムは、上記のすべてのListIteratorメソッドのデモンストレーションを示しています。
import java.util.*; public class Main{ public static void main(String args()){ //define list and add elements to it ListnameList=new ArrayList(); nameList.add('Savich'); nameList.add('Dane'); nameList.add('Lacey'); nameList.add(1,'James'); System.out.println('Original List:' + nameList); //define a list iterator for this list ListIterator list_itr=nameList.listIterator(); System.out.println('List elements in forward direction:'); //while there are still elements in the list, display next index and element while(list_itr.hasNext()){ System.out.println('Index:'+list_itr.nextIndex()+' Element:'+list_itr.next()); } //call set() method to set next value to 'Sally' list_itr.set('Sally'); System.out.println('
List after set('Sally'):' + nameList); //while there are elements in the list, display previous index and element System.out.println('
List elements in backward direction:'); while(list_itr.hasPrevious()){ System.out.println('Index:'+list_itr.previousIndex()+' Element:'+list_itr.previous()); } //call remove () method list_itr.remove(); System.out.println('List after remove():' + nameList); } }
出力:
Javaの例でのListIteratorインターフェース
ListIteratorを使用する別の例を見てみましょう。このプログラムには、整数値のArrayListがあります。次に、ListIteratorを使用して、リストをトラバースし、リスト要素を表示します。
また、ArrayList内の偶数要素のみを選択し、ListIteratorメソッドを使用してそれらの値を奇数に変更します。
import java.util.ArrayList; import java.util.ListIterator; public class Main { public static void main(String() args) { //define ArrayList and add values to it using for loop ArrayList intList = new ArrayList(); for (int i = 0; i <10; i++) intList.add(i+2); System.out.println('Original ArrayList:' + intList); // define the ListIterator ListIterator list_itr = intList.listIterator(); System.out.println('List elements using listIterator:'); //while list has more elements while (list_itr.hasNext()) { //retrieve next element int i = (Integer)list_itr.next(); // print the element System.out.print(i + ' '); // change only even numbers to odd by setting value = value +1 to current element if (i%2==0) { list_itr.set(i+1); // set method to change value } } System.out.println(); System.out.println('Final ArrayList of odd values:' + intList); } }
出力:
よくある質問
Q#1)イテレータとはどういう意味ですか?
回答: イテレータは、Javaのコレクションフレームワークの一部であるインターフェイスです。このインターフェースはjava.utilパッケージに含まれています。イテレータインターフェイスは、オブジェクトのコレクションを反復処理するために使用されます。
Q#2)Javaのイテレータインターフェイスとは何ですか?
回答: 以前にJavaコレクションフレームワークで使用されていた列挙型の代わりに、Javaのイテレータインターフェイスが使用されます。イテレータインターフェイスは、バージョン1.2以降のJavaに存在します。
このインターフェースを使用すると、Javaコレクションを反復処理し、コレクション要素を処理できます。
Q#3)JavaでのlistIterator()メソッドの使用法は何ですか?
回答: listIterator()メソッドはjava.util。*パッケージに属しています。このメソッドは、それを呼び出した特定のリストオブジェクトのリストイテレータを返し、リストをトラバースして要素にアクセスするために使用できます。 listIteratorは、リストの実装でのみ機能します。
Q#4)イテレータはクラスですか、それともインターフェイスですか?
回答: イテレータはクラスではなく、 Javaのインターフェース 。イテレータインターフェイスは、他のクラスで実装でき、リスト要素またはコレクション要素を反復処理するために使用できます。
Q#5)Javaには何種類のイテレータがありますか?
回答: Javaのイテレータには、次の3つのタイプがあります。
- 列挙: これは、Vector、hashtableなどのコレクションから要素を読み取るために使用されるインターフェイスです。各要素には、コレクション内の位置に応じて番号が付けられます。
- イテレータ: このインターフェイスは、コレクションオブジェクトに適用してコレクションをトラバースできるため、ユニバーサルと呼ぶことができます。これは、要素を読み取る機能とともに削除機能を備えた改善された列挙型です。
- ListIterator: ListIteratorは、双方向の反復、つまり順方向と逆方向の反復を提供するインターフェースです。 ListIteratorは、LinkedList、ArrayListなどを含むリスト実装でのみ機能します。
結論
JavaのListIteratorインターフェースは、Iteratorインターフェースから派生しています。 ListIteratorインターフェースは、Iteratorインターフェースのメソッドを直接継承することに加えて、プログラマーが双方向反復を実行するのを支援できる独自のさまざまなメソッドを導入しています。
このチュートリアルでは、クラス図とListIteratorインターフェイスのさまざまなメソッドについて説明しました。また、さまざまなリストをトラバースする方法とともに、これらのメソッドの実装も確認しました。
=> すべてのJavaトレーニングシリーズを見るには、ここにアクセスしてください。