モーダルを閉じる工作HardwareHub ロゴ画像

工作HardwareHubは、ロボット工作や電子工作に関する情報やモノが行き交うコミュニティサイトです。さらに詳しく

利用規約プライバシーポリシー に同意したうえでログインしてください。

工作HardwareHub ロゴ画像 (Laptop端末利用時)
工作HardwareHub ロゴ画像 (Mobile端末利用時)
目次目次を開く/閉じる

デザインパターンIterator の Javaコード例

モーダルを閉じる

ステッカーを選択してください

モーダルを閉じる

お支払い内容をご確認ください

購入商品
」ステッカーの表示権
メッセージ
料金
(税込)
決済方法
GooglePayマーク
決済プラットフォーム
確認事項

利用規約をご確認のうえお支払いください

※カード情報はGoogleアカウント内に保存されます。本サイトやStripeには保存されません

※記事の執筆者は購入者のユーザー名を知ることができます

※購入後のキャンセルはできません

作成日作成日
2013/07/09
最終更新最終更新
2015/12/16
記事区分記事区分
一般公開

目次

    アカウント プロフィール画像 (サイドバー)

    Pythonでデータ解析と自動化ツールを開発しています。DjangoでのWeb開発も得意です!

    0
    ステッカーを贈るとは?

    Item.java

    メンバ変数 num を持つ Item を定義します。

    class Item {
        private int num;
        public Item(int num) {
            this.num = num;
        }
        public int getNum() {
            return num;
        }
    }
    

    ConcreteIterator.java、Iterator.java

    後に定義する Aggregate から値を取り出す Iterator を定義します。

    class ConcreteIterator implements Iterator {
        private ConcreteAggregate concreteAggregate;
        private int idx;
    
        public ConcreteIterator(ConcreteAggregate concreteAggregate) {
            this.concreteAggregate = concreteAggregate;
            this.idx = 0;
        }
        public boolean hasNext() {
            return (idx < concreteAggregate.getSize()) ? true : false;
        }
        public Object next() {
            return concreteAggregate.getItemAt(idx++);
        }
    }
    
    interface Iterator {
        public abstract boolean hasNext();
        public abstract Object next();
    }
    

    ConcreteAggregate.java、Aggregate.java

    複数の Item を持つクラスを Aggregate として定義します。自身を走査するための Iterator も返せるようにします。

    class ConcreteAggregate implements Aggregate {
        private Item[] items;
        private int size = 0;
    
        public ConcreteAggregate(int maxSize) {
            this.items = new Item[maxSize];
        }
    
        public void append(Item item) {
            this.items[size++] = item;
        }
        public Item getItemAt(int idx) {
            return items[idx];
        }
        public int getSize() {
            return size;
        }
    
        public Iterator iterator() {
            return new ConcreteIterator(this);
        }
    }
    
    interface Aggregate {
        public abstract Iterator iterator();
    }
    

    Main.java

    Main から、ループ処理の実装を別のクラスに切り出すことができました。

    • Aggregate の実装を配列からベクターに変更した場合、Main の改修は必要ありません。
    • Iterator の実装として、逆方向に走査可能なものを追加する、といった拡張も容易です。
    class Main {
        public static void main(String[] args) {
            int n = 5;
            ConcreteAggregate concreteAggregate = new ConcreteAggregate(n);
    
            for(int i=0; i<n; ++i) concreteAggregate.append(new Item(i));
    
            Iterator it = concreteAggregate.iterator();
            while(it.hasNext()) {
                Item item = (Item)it.next();
                System.out.println(item.getNum());
            }
        }
    }
    

    出力

    $ javac Main.java Item.java Aggregate.java Iterator.java ConcreteAggregate.java ConcreteIterator.java && java Main
    0
    1
    2
    3
    4
    
    0
    詳細設定を開く/閉じる
    アカウント プロフィール画像 (本文下)

    Pythonでデータ解析と自動化ツールを開発しています。DjangoでのWeb開発も得意です!

    記事の執筆者にステッカーを贈る

    有益な情報に対するお礼として、またはコメント欄における質問への返答に対するお礼として、 記事の読者は、執筆者に有料のステッカーを贈ることができます。

    さらに詳しく →
    ステッカーを贈る コンセプト画像

    Feedbacks

    Feedbacks コンセプト画像

      ログインするとコメントを投稿できます。

      関連記事

      • Spring Security フォームログインのサンプルコード
        Spring フレームワークによる Web アプリケーション開発で、ログイン処理を実装する際は Spring Security が便利です。ここでは特に Spring Boot で Web アプリケーションを開発する場合を対象とし、フォームによる ID/Password ログインを行うためのサンプルコードをまとめます。 公式ドキュメント [Spring Security チュートリアル](http...
        えびちゃんえびちゃん12/4/2019に更新
        いいねアイコン画像0
      • Java配列の宣言方法 (C/C++との違い)
        Javaの配列 Javaの配列宣言方法はC/C++と似ているようで若干異なる。 初期化しない場合 C/C++の int array[10]; はJavaでは int array[] = new int[10]; となる。同様にC/C++の int array[3][3]; はJavaでは int array[][] = new int[3][3]; となる。 初期化
        てんとうむしてんとうむし5/13/2018に更新
        いいねアイコン画像0
      • PlantUML による UML 図の描き方
        サムネイル画像-c788fffde5
        PlantUML はテキスト形式で表現されたシーケンス図やクラス図といった UML (Unified Modeling Language) 図の情報から画像を生成するためのツールです。簡単な使い方をまとめます。 インストール方法の選択 Atom や Eclipse のプラグインをインストールしてエディタから利用する方法、JAR をダウンロードして Java コマンドで実行する方法、Redmine ...
        kentakenta1/21/2020に更新
        いいねアイコン画像0
      • Akka HTTP サンプルコード (Scala)
        サムネイル画像-a98142497c
        Akka アクターを用いて実装された汎用 HTTP フレームワークです。Spray の後継です。コアモジュールである akka-http-core は 2016/2/17 に experimental が外れました。akka-http などのいくつかのサブモジュールは 2016/3/1 現在 experimental のままですが、基本的な
        雄太雄太10/7/2021に更新
        いいねアイコン画像0
      • Kestrel の使用例
        Kestrel は Message Queue (MQ) の実装のひとつです。一般に MQ はアプリケーション間やプロセス間、スレッド間で非同期に通信するために用いられます。メッセージの送信側は MQ に書き込めば受信側の応答を待たずに次の処理に非同期に進むことができます。Kestrel はわずか 2500 行程の Scala で実装されており JVM で動作します。MQ 自体はメモリ上に存在する...
        したくんしたくん10/12/2017に更新
        いいねアイコン画像0