12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Iteratorの回しかた道場 (Java)

Last updated at Posted at 2019-10-10

Iteratorを使う

Iteratorが取り出せるほとんどのケースにおいてその持ち主はIterableインターフェースが実装されているので、Iteratorを使わずとも拡張for文でループを回すことができます。

しかし、math3のConbinationsのように、Iteratorのみが構えられたAPIも一部存在するため、
今回は拡張for文を使用せずに、あえてIteratorを使ってループを回してみます。

Iterator<T>の主要メソッド

メソッド 機能
T next() 次の要素を取り出す
boolean hasNext() 今の状態から見て、次の要素を取り出すことができる場合はtrueが返ってくる

Iteratorは要素を順繰りになぞっていくためのインターフェースです。
next()メソッドの呼び出しによって要素を取り出すことができます。
hasNext()がtrueを返してくる間だけ、next()を呼び出し続けて処理を行う」というのが一般的な使い方です。

Iteratorは内部状態を持っていて、next()を使って要素を取り出す毎にその内部状態が変化してゆきます。最後の要素を取り出した直後にはhasNext()がfalseを返してきます。
Undoや初期状態に戻すようなメソッドは定義されていないため、使い捨て前提のインターフェースです。

(しないと思うけど)Iteratorを自作する場合は気をつけてくださいね。

Iteratorを使ったコード

前置きが長くなってしまいましたがコードです。
while文とfor文の2通りを挙げます。

while文による回し方

Iterator<String> itr = list.iterator();
while(itr.hasNext()){
  String str = itr.next();
  System.out.println(str);
}

for文による回し方

for(Iterator<String> itr = list.iterator(); itr.hasNext();){
  String str = itr.next();
  System.out.println(str);
}

個人的には変数のスコープが狭くなってくれるfor文のほうを好んでいます。

12
10
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?