JavaのIteratorとListIteratorの違いを徹底解説
Javaのコレクションフレームワークには、要素を順番に処理するための仕組みとして「Iterator」と「ListIterator」が用意されています。名前は似ていますが、対応できるコレクションの種類や実行できる操作に大きな違いがあります。本記事では、それぞれの特徴と相違点をわかりやすく解説します。
Iteratorとは
Iteratorは、List・Set・Mapなど幅広いコレクションの要素を走査するための標準的なインターフェースです。主な特徴は以下のとおりです。
- List、Set、Mapなど、さまざまなコレクションを走査できる(Mapの場合はentrySet()やkeySet()経由で取得)
- 現在位置のインデックス(添字)を取得できない
- 要素の変更や置き換えはできない(削除のみ可能)
- コレクション内の要素を前方方向にのみ走査する
- 走査中にコレクションへ要素を追加すると、ConcurrentModificationExceptionが発生する恐れがある
- 主なメソッド:hasNext()、next()、remove()
ListIteratorとは
ListIteratorは、Iteratorを継承したインターフェースで、List専用に設計されたイテレータです。双方向の走査や要素の追加・置き換えなど、より柔軟な操作が可能になります。
- 走査できるのはListのみ(SetやMapには使用不可)
- 前方・後方の両方向に走査できる
- nextIndex()やpreviousIndex()でインデックスを取得できる
- set()による要素の変更・置き換えが可能
- add()により、走査中でも任意のタイミングで要素を追加できる
- 主なメソッド:next()、previous()、nextIndex()、previousIndex()、set()、add()、remove()
IteratorとListIteratorの比較表
| 比較項目 | Iterator | ListIterator |
|---|---|---|
| 対応するコレクション | List、Set、Mapなど | Listのみ |
| 走査方向 | 前方のみ | 前方・後方の両方 |
| インデックスの取得 | 不可 | 可(nextIndex() / previousIndex()) |
| 要素の変更・置き換え | 不可 | 可(set()) |
| 要素の追加 | 不可 | 可(add()) |
| 要素の削除 | 可(remove()) | 可(remove()) |
使い分けのポイント
単純に要素を先頭から順番に処理するだけであれば、汎用性の高いIteratorで十分です。一方、リスト内を前後に移動しながら処理したい場合や、走査中に要素の追加・置き換えを行いたい場合には、ListIteratorが適しています。用途に応じて適切なイテレータを選択することで、安全かつ効率的なコレクション操作が実現できます。
-
JavaでのArrayListとHashSetの違いを徹底解説!使い分けのポイントも紹介
HashSetとArrayListは、どちらもJavaコレクションフレームワークにおいて最も重要なクラスの一つです。それぞれ特徴が異なるため、用途に応じた適切な使い分けが求められます。本記事では、ArrayListとHashSetの主な違いを6つの観点から比較し、実際のサンプルコードとともにわかりやすく解説します。ArrayListとHashSetの違い一覧No.項目ArrayListHashSet1実装インターフェースListインターフェースを実装しています。Setインターフェースを実装しています。2内部構造内部的には配列(動的配列)を使って実装されています。内部的にはHashMapを使って
-
JavaのIteratorとListIteratorの違いを徹底解説!特徴と使い分けのポイント
IteratorとListIteratorとは Javaでは、コレクションに格納された要素を1つずつ順番に取り出して処理するために、IteratorとListIteratorという2つのインターフェースが提供されています。 両者は内部実装こそ異なるものの、目的はどちらも「コレクション内のデータを順次走査する」ことです。しかし、利用できるコレクションの種類や、走査中に行える操作には大きな違いがあります。 IteratorとListIteratorの主な違い一覧 No.比較項目IteratorListIterator 1適用範囲List、Set、Queueなど、あらゆる種類のコレクションに対し