JavaのIteratorとListIteratorの違いを徹底解説!使い方とサンプルコード付き
Javaでは、コレクション内の要素を順番に処理するための仕組みとして、Iterator(イテレータ)とListIterator(リストイテレータ)という2つのインターフェースが提供されています。この記事では、両者の違いやそれぞれの使い方を、実際のコード例とともにわかりやすく解説します。
IteratorとListIteratorの主な違い
IteratorはJavaのインターフェースの一つで、リストの要素を前方方向(先頭から末尾へ)のみ走査できます。一方、ListIteratorはIteratorインターフェースを継承したインターフェースで、要素を前方・後方の両方向に走査できる点が大きな特徴です。
また、適用できるコレクションにも違いがあります。IteratorはList、Set、Queueなど幅広いコレクションで利用できるのに対し、ListIteratorはList型のコレクションでのみ使用可能です。
さらに、主要なメソッドも異なります。
- Iterator:
hasNext()、next()、remove() - ListIterator:
add()、hasNext()、hasPrevious()、previous()、remove()
違いの比較表
| 項目 | Iterator | ListIterator |
|---|---|---|
| 走査方向 | 前方のみ | 前方・後方の両方 |
| 継承関係 | — | Iteratorを継承 |
| 対応コレクション | List、Set、Queue | Listのみ |
| 要素の追加 | 不可 | 可(add()) |
Iteratorの構文
public interface Iterator<E>
Iteratorの使用例
import java.util.*;
public class IteratorTest {
public static void main(String[] args) {
List<String> listObject = new ArrayList<String>();
listObject.add("India");
listObject.add("Australia");
listObject.add("England");
listObject.add("Bangladesh");
listObject.add("South Africa");
Iterator it = listObject.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
}
}
実行結果
India Australia England Bangladesh South Africa
この例では、iterator()メソッドでIteratorを取得し、hasNext()で次の要素が存在するかを確認しながら、next()で要素を一つずつ取り出しています。
ListIteratorの構文
public interface ListIterator<E> extends Iterator<E>
ListIteratorの使用例
import java.util.*;
public class ListIteratorTest {
public static void main(String[] args) {
List<String> listObject = new ArrayList<String>();
listObject.add("Java");
listObject.add("Selenium");
listObject.add("Python");
listObject.add("Java Script");
listObject.add("Cloud Computing");
ListIterator it = listObject.listIterator();
System.out.println("前方向への走査:");
while (it.hasNext()) {
System.out.println(it.next());
}
System.out.println("--------------------------------------------");
System.out.println("後方向への走査:");
while (it.hasPrevious()) {
System.out.println(it.previous());
}
}
}
実行結果
前方向への走査: Java Selenium Python Java Script Cloud Computing ----------------------------------------------- 後方向への走査: Cloud Computing Java Script Python Selenium Java
このように、ListIteratorを使えば前方への走査が終わったカーソル位置からそのままhasPrevious()とprevious()を組み合わせて、逆順に要素をたどることができます。
まとめ
- Iterator:前方方向のみの走査。List・Set・Queueなど幅広いコレクションで使える汎用的なインターフェース。
- ListIterator:Iteratorを継承し、双方向の走査や要素の追加が可能。ただし対象はListのみ。
単純な順次処理ならIteratorで十分ですが、逆順走査や途中での要素追加が必要な場合はListIteratorを選択するとよいでしょう。用途に応じて適切に使い分けることで、より柔軟で読みやすいコードを実現できます。
-
JavaでJTextFieldにパディングを追加する方法【setMarginの使い方】
JTextFieldはJTextComponentクラスのサブクラスであり、ユーザーが1行形式でテキストを入力できる、Swingの中でも特に重要なコンポーネントの一つです。JTextFieldでは、ユーザーが入力を行う際にActionListenerインターフェースを通じてアクションイベントが発生します。主なメソッドとしては、setText()、getText()、setBorder()、setEnabled()などが挙げられます。 JTextFieldにパディング(内側の余白)を追加したい場合は、JTextComponentクラスが提供するsetMargin(Insets m)メソッドを使用
-
JavaのJSeparatorクラスとは?重要性と基本的な使い方を解説
JSeparatorクラスとはJSeparatorは、Swingで提供されるコンポーネント同士を視覚的に区切るためのクラスです。水平または垂直の区切り線、あるいは余白(空白スペース)として表示され、GUIの見やすさと整理されたレイアウトを実現します。JSeparatorクラスの主な役割は、レイアウト内のコンポーネント間に区切り線を描画して分離することです。これにより、関連する項目をグループ化し、ユーザーインターフェース全体の可読性を高めることができます。メニューやツールバーへの区切り線の追加メニューやツールバーにセパレータを追加する最も簡単な方法は、JMenu、JPopupMenu、JTool