Java : ListIterator - API使用例
ListIterator (Java SE 23 & JDK 23) の使い方まとめです。
ほとんどのメソッドにサンプルコードがあります。
APIドキュメントのおともにどうぞ。
概要
リスト用のイテレータ。プログラマがいずれかの方向にリストをトラバースしたり、イテレーション時にリストを変更したり、イテレータのリスト内での現在の位置を取得したりできます。
final var list = List.of("aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
final var iterator = list.listIterator();
System.out.println("-- next --");
while (iterator.hasNext()) {
final var value = iterator.next();
System.out.println(value);
}
// 結果
// ↓
//-- next --
//aaa
//bbb
//ccc
System.out.println("-- previous --");
while (iterator.hasPrevious()) {
final var value = iterator.previous();
System.out.println(value);
}
// 結果
// ↓
//-- previous --
//ccc
//bbb
//aaa
メソッド
void add (E e)
指定された要素をリストに挿入します(オプションの操作)。
final var list = new ArrayList<String>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
final var iterator = list.listIterator();
while (iterator.hasNext()) {
final var value = iterator.next();
iterator.add(value.toUpperCase());
}
System.out.println(list); // [aaa, AAA, bbb, BBB, ccc, CCC]
boolean hasNext ()
リストを順方向にトラバースしたときに、このリスト・イテレータがさらに要素を持っている場合にtrueを返します。
final var list = List.of("aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
final var iterator = list.listIterator();
System.out.println("-- next --");
while (iterator.hasNext()) {
final var index = iterator.nextIndex();
final var value = iterator.next();
System.out.printf("index = %d, value = %s%n", index, value);
}
// 結果
// ↓
//-- next --
//index = 0, value = aaa
//index = 1, value = bbb
//index = 2, value = ccc
boolean hasPrevious ()
リストを逆方向にトラバースしたときに、このリスト・イテレータがさらに要素を持っている場合にtrueを返します。
final var list = List.of("aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
final var iterator = list.listIterator(list.size());
System.out.println("-- previous --");
while (iterator.hasPrevious()) {
final var index = iterator.previousIndex();
final var value = iterator.previous();
System.out.printf("index = %d, value = %s%n", index, value);
}
// 結果
// ↓
//-- previous --
//index = 2, value = ccc
//index = 1, value = bbb
//index = 0, value = aaa
E next ()
リスト内の次の要素を返し、カーソル位置を前に進めます。
final var list = List.of("aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
final var iterator = list.listIterator();
System.out.println("-- next --");
while (iterator.hasNext()) {
final var index = iterator.nextIndex();
final var value = iterator.next();
System.out.printf("index = %d, value = %s%n", index, value);
}
// 結果
// ↓
//-- next --
//index = 0, value = aaa
//index = 1, value = bbb
//index = 2, value = ccc
int nextIndex ()
次にnext()を呼び出したときに返されることになる要素のインデックスを返します。
final var list = List.of("aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
final var iterator = list.listIterator();
System.out.println("-- next --");
while (iterator.hasNext()) {
final var index = iterator.nextIndex();
final var value = iterator.next();
System.out.printf("index = %d, value = %s%n", index, value);
}
// 結果
// ↓
//-- next --
//index = 0, value = aaa
//index = 1, value = bbb
//index = 2, value = ccc
E previous ()
リスト内の前の要素を返し、カーソル位置を逆方向に移動します。
final var list = List.of("aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
final var iterator = list.listIterator(list.size());
System.out.println("-- previous --");
while (iterator.hasPrevious()) {
final var index = iterator.previousIndex();
final var value = iterator.previous();
System.out.printf("index = %d, value = %s%n", index, value);
}
// 結果
// ↓
//-- previous --
//index = 2, value = ccc
//index = 1, value = bbb
//index = 0, value = aaa
int previousIndex ()
次にprevious()を呼び出したときに返されることになる要素のインデックスを返します。
final var list = List.of("aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
final var iterator = list.listIterator(list.size());
System.out.println("-- previous --");
while (iterator.hasPrevious()) {
final var index = iterator.previousIndex();
final var value = iterator.previous();
System.out.printf("index = %d, value = %s%n", index, value);
}
// 結果
// ↓
//-- previous --
//index = 2, value = ccc
//index = 1, value = bbb
//index = 0, value = aaa
void remove ()
next()またはprevious()によって返された最後の要素をリストから削除します(オプションの操作)。
final var list = new ArrayList<Integer>();
Collections.addAll(list, 1, 2, 3, 4, 5, 6);
System.out.println(list); // [1, 2, 3, 4, 5, 6]
final var iterator = list.listIterator();
while (iterator.hasNext()) {
final var value = iterator.next();
if (value % 2 == 0) {
iterator.remove();
}
}
System.out.println(list); // [1, 3, 5]
void set (E e)
next()またはprevious()から最後に返された要素を指定された要素で置き換えます(オプションの操作)。
final var list = new ArrayList<String>();
Collections.addAll(list, "aaa", "bbb", "ccc");
System.out.println(list); // [aaa, bbb, ccc]
final var iterator = list.listIterator();
while (iterator.hasNext()) {
final var value = iterator.next();
iterator.set(value.toUpperCase());
}
System.out.println(list); // [AAA, BBB, CCC]
Iteratorで宣言されたメソッド
forEachRemaining
「Java API 使用例 : Iterator」をご参照ください。
関連記事
- List(リスト)の基本
- Map(マップ)の基本
- Set(セット)の基本
- List の初期化方法いろいろ
- Map の初期化方法いろいろ
- Set の初期化方法いろいろ
- 配列 vs. List
- 配列からListへの変換
- List から配列への変換
- API 使用例
- Collection (コレクション)
- Collections (コレクション操作)
- Comparable
- Comparator
- Iterator
- List (リスト)
- Map (マップ)
- Map.Entry (キーと値のペア)
- Queue (キュー)
- AbstractQueue
- ArrayBlockingQueue (ブロッキング・配列キュー)
- ArrayDeque (両端キュー)
- BlockingDeque (ブロッキング・両端キュー)
- BlockingQueue (ブロッキング・キュー)
- ConcurrentLinkedDeque (並列処理用・両端キュー)
- ConcurrentLinkedQueue (並列処理用キュー)
- Deque (両端キュー)
- LinkedBlockingDeque (ブロッキング・リンク両端キュー)
- LinkedBlockingQueue (ブロッキング・リンクキュー)
- LinkedList (二重リンク・リスト)
- PriorityBlockingQueue (ブロッキング・優先度付きキュー)
- PriorityQueue (優先度付きキュー)
- RandomAccess
- Set (セット)
- Spliterator