イテレータ(iterator)
forで配列の要素を参照する際に、
i番目の要素を得る手段がない、得るために時間がかかる。
クラスによって全要素を参照する手順が異なるのが不便。
そういった問題を解決するために提供されている繰り返し用のメソッド。
反復子。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
import java.util.ArrayList; import java.util.Iterator; public class xxx { // フィールド宣言 String name; int age; // コンストラクタ宣言 public xxx(String name,int age) { this.name = name; this.age = age; } // メイン処理 public static void main(String[] args) { // xxx型の要素が入るArrayList xxを宣言 ArrayList<xxx> xx = new ArrayList<xxx>(); // xxに要素を代入 xx.add(new xxx("一郎",21)); xx.add(new xxx("二郎",22)); xx.add(new xxx("三郎",23)); xx.add(new xxx("四郎",24)); xx.add(new xxx("五郎",25)); // イテレータを使ったforループ for (Iterator<xxx> it = xx.iterator();it.hasNext();) { xxx set = it.next(); System.out.println(set.name + set.age); } } } |
実行結果
一郎21 二郎22 三郎23 四郎24 五郎25
マークした24~26行目の説明をば。
まずは各メソッドの解説を。
hasNext
次の要素があるかチェックする。
戻り値はboolean。あればtrue。なければfalse。
next
次の要素を要求するメソッド。
このサンプルではイテレータitに対して要求する。
呼び出すと次の要素に進む。
配列の添字をインクリメントすることと似たような処理。
要素2に注目していた場合は要素3へと要求を進める。
続いて処理のフロー(雑)
- ArrayListのインスタンスxxのiteratorメソッドの戻り値(イテレータ)でitを初期化
- it.hasNextの値がfalseになるまでforでループ
- xxx型のsetインスタンスにit.next();で得られる要素を代入
- setインスタンスのnameとageフィールドを出力
- “五郎”,25の入った要素を呼び出すと次のhasNextの値がfalseになるためループ処理を終了する
こんなもんすかね。進度速くてギリギリやで・・・・。理解が。
こちらのサイトが詳しいです。これでなんとか追いつかせた。理解。
コメント
No Trackbacks.