以下に示す比較チャートを使用して、IteratorとListIteratorの違いについてもう少し説明しましょう。
比較表
比較基準 | イテレータ | ListIterator |
---|---|---|
基本 | イテレータはコレクション内の要素を順方向にのみ移動できます。 | ListIteratorはコレクション内の要素を前方および後方に移動できます。 |
追加する | イテレーターはコレクションに要素を追加できません。 | ListIterorは要素をコレクションに追加できます。 |
修正する | イテレーターはコレクション内の要素を変更できません。 | ListIteratorはset()を使用してコレクション内の要素を変更できます。 |
トラバース | イテレータはMap、List、およびSetを通過できます。 | ListIteratorはListオブジェクトのみをトラバースできます。 |
索引 | イテレータには、コレクション内の要素のインデックスを取得する方法はありません。 | ListIteratorを使用すると、コレクション内の要素のインデックスを取得できます。 |
イテレータの定義
イテレータはコレクション フレームワークのインタフェースです。 これはコレクション要素を通過するために使用されます。 イテレータを使用すると、コレクション内の各要素を1つずつ繰り返す、コレクションから要素を取得する、またはコレクションから要素を削除することができます。 Iteratorを使用してコレクション内の要素を変更できないことに気付くでしょう。
イテレータには、イテレータをコレクションの先頭に戻すメソッドiterator()があります。 コレクションの先頭にイテレータを配置したら、コレクション内の要素を走査して、ループが繰り返されるたびにhasNext()を呼び出すループを確立します。 hasNext()がtrueを返す場合、それはコレクション内に次の要素があることを意味し、 falseを返す場合、それはすべての要素がトラバースされることを意味します。 それから、ループの中で、 next()を使ってCollectionの各要素を取得できます。 next()メソッドはコレクションの次の要素を返します。
欠点:
Iteratorを使用すると、コレクションを順方向にのみトラバースできます。
Iteratorを使用すると、コレクション内の要素を操作したり変更したりすることはできません。
ListIteratorの定義
ListIteratorはCollectionフレームワークのインタフェースであり、 Iteratorインタフェースを拡張します。 ListIteratorを使用すると、コレクションの要素を前後に移動できます。 コレクション内の任意の要素を追加 、 削除、または修正することもできます。 つまり、Iteratorの欠点が取り除かれたと言えます。
ListIteratorのメソッドは以下のとおりです。
hasNext() :trueが返された場合は、コレクション内にさらに要素があることを確認します。
next() :リストの次の要素を返します。
nextIndex() :リスト内の次の要素のインデックスを返します。
hasPrevious() :コレクション内に逆方向の要素がある場合はtrueを返します。
previous() :コレクション内の前の要素を返します。
previousIndex() :コレクション内の前の要素のインデックスを返します。
remove() :コレクションから要素を削除します。
set() :コレクション内の要素を変更します。
add() :コレクションに新しい要素を追加します。
IteratorとListIteratorの主な違い
- IteratorとListIteratorの基本的な違いは、どちらもカーソルであること、コレクション内の要素を順方向にしかトラバースできないことです。 一方、ListIteratorは順方向と逆方向の両方にトラバースできます。
- イテレータを使用すると、要素をコレクションに追加することはできません。 しかし、ListIteratorを使うことで要素をコレクションに追加することができます。
- Iteratorを使用すると、ListIteratorを使用してコレクションから要素を削除できるので、コレクション内の要素を削除することはできません。
- イテレータを使用すると、Map、List、Setなどのすべてのコレクションをトラバースできます。 ただし、ListIterorを使用すると、List実装オブジェクトのみをトラバースできます。
- Iteratorを使って要素のインデックスを取得することができます。 しかし、Listはシーケンシャルでインデックスベースなので、ListIteratorを使って要素のインデックスを取得することができます。
結論:
Listオブジェクトを特に順方向と逆方向の両方にトラバースする必要がある場合は、ListIteratorを使用できます。 それ以外の場合は、すべての型コレクションオブジェクトをサポートするため、Iteratorを使用できます。