【Java】IteratorとEnumerationインターフェースの違いを徹底解説
この記事では、Javaにおけるイテレータ(Iterator)インターフェースと列挙型(Enumeration)インターフェースの違いについて、それぞれの特徴を挙げながらわかりやすく解説します。両者はどちらもコレクション内の要素を順番に取り出すための「カーソル」として機能しますが、用途や使える場面が大きく異なります。
イテレータ(Iterator)とは
- 汎用カーソル(ユニバーサルカーソル)として動作します。
- すべてのコレクションクラスに適用できます。
remove()メソッドを持っており、走査中に要素を削除できます。- レガシーインターフェースではなく、Java Collections Framework(JDK 1.2以降)で導入された比較的新しいインターフェースです。
- HashMap、LinkedList、ArrayList、HashSet、TreeMap、TreeSetなど、さまざまなコレクションの要素を走査するために使用できます。
- 走査中にコレクションに対して変更操作(要素の削除など)を行うことが可能です。
列挙型(Enumeration)とは
- 汎用カーソルではありません。
- VectorやHashtableなどのレガシークラスにのみ適用されます。
remove()メソッドを持っていません。- JDK 1.0の時代から存在するレガシーインターフェースです。
- 実質的に読み取り専用のインターフェースとして機能します。
- そのため、要素を走査している最中にコレクションを変更することはできません。
- VectorやHashtableの要素を走査するために使用できます。
IteratorとEnumerationの比較まとめ
| 項目 | Iterator | Enumeration |
|---|---|---|
| カーソルの種類 | 汎用カーソル | 非汎用カーソル |
| 適用範囲 | すべてのコレクションクラス | レガシークラスのみ(Vector、Hashtableなど) |
| remove()メソッド | あり | なし |
| 歴史 | 非レガシー(JDK 1.2以降) | レガシー(JDK 1.0から) |
| 走査中の変更 | 可能 | 不可(読み取り専用) |
| 主な対象コレクション | HashMap、LinkedList、ArrayList、HashSet、TreeMap、TreeSetなど | Vector、Hashtable |
使い分けのポイント
新しく書くコードでは、柔軟性が高く要素の削除も行えるIteratorを使用するのが推奨です。一方、Enumerationは古いAPI(VectorやHashtableなど)との互換性を保つ必要がある場合に限り利用するとよいでしょう。なお、レガシークラスを扱う場合でも、Collections.enumeration()やイテレータへの変換を活用することで、より現代的なコードスタイルに統一できます。
-
JavaのIteratorとEnumerationの違いを徹底比較!使い分けのポイントを解説
はじめに:IteratorとEnumerationとはJavaのコレクションフレームワークには、コレクション内の要素を順番に走査(トラバース)しながらアクセスするための仕組みとして「カーソル」が用意されています。その代表格が Iterator(イテレータ) と Enumeration(列挙) の2つです。両者はどちらもコレクションフレームワークに属しますが、登場した時期と役割が異なります。EnumerationはJDK 1.0から存在する歴史あるインターフェースで、IteratorはJDK 1.2でコレクションフレームワークとともに導入された、より新しいインターフェースです。Enumerati
-
JavaのIteratorとListIteratorの違いを徹底解説!特徴と使い分けのポイント
IteratorとListIteratorとは Javaでは、コレクションに格納された要素を1つずつ順番に取り出して処理するために、IteratorとListIteratorという2つのインターフェースが提供されています。 両者は内部実装こそ異なるものの、目的はどちらも「コレクション内のデータを順次走査する」ことです。しかし、利用できるコレクションの種類や、走査中に行える操作には大きな違いがあります。 IteratorとListIteratorの主な違い一覧 No.比較項目IteratorListIterator 1適用範囲List、Set、Queueなど、あらゆる種類のコレクションに対し