質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
iteratorパターン

iteratorパターンとは、オブジェクト指向プログラミングのデザインパターンです。コンテナオブジェクトの要素を列挙する手段を独立させることによって、コンテナの内部仕様に依存しない反復子を提供することを目的とします。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

999閲覧

デザインパターンのIteratorについて

_tomo

総合スコア1

iteratorパターン

iteratorパターンとは、オブジェクト指向プログラミングのデザインパターンです。コンテナオブジェクトの要素を列挙する手段を独立させることによって、コンテナの内部仕様に依存しない反復子を提供することを目的とします。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2020/10/31 08:50

前提・実現したいこと

デザインパターンのIteratorパターンを学習中に疑問に思ったことを解決したい。
こちらのサイトで学習中

疑問点

かなり外れたことを質問してしまうと思いますが、ご教授ください。

上に記載したサイトにStudentListクラスのStudent[]があると思います。
これってArrayList<Student>で作成すれば良いようなと、初心者の自分は思ってしまいます。

確かに、サイトに書いているパターンでかけば、先頭から一つ一つ取り出す処理は実現できると思いますが、
実際の現場のコードで、わざわざ配列で作らないかなと思いました。

Iteratorパターンを学んだことで、ArrayListのiteratorの動き自体への理解は深まりましたが、
現実のプロジェクトにどう当てはめれば良いのだろうと、疑問が残りました。

何か疑問を解消できるようなお言葉を頂ければ幸いです。

どうぞよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

List<Integer>型の変数listがあるとします。

Java

1for(int e: list) { 2 ... 3}

上記のコードは、次のように書いているのと同じです。

Java

1Iterator<Integer> it = list.iterator(); 2while(it.hasNext()) { 3 int e = it.next(); 4 ... 5}

これ、まさにIteratorパターンですよね?
実装者がいちいちイテレータを呼んでいては面倒なので、内部で処理されているだけです。

Iteratorパターンを学んだことで、ArrayListのiteratorの動き自体への理解は深まりましたが、

現実のプロジェクトにどう当てはめれば良いのだろうと、疑問が残りました。

直接的に役立つことはまず無いでしょう。
ただし、仕組みを知ることは大切です。これは何にでも言えることですが。

実験

MyList#iteratorを明示的に呼び出していないのがミソです。

Java

1import java.util.*; 2 3class MyList extends ArrayList<Integer> { 4 MyList(List<Integer> arg) { 5 super(arg); 6 } 7 8 @Override 9 public Iterator<Integer> iterator() { 10 System.out.println("イテレータが作られてるよ!"); 11 return super.iterator(); 12 } 13} 14 15 16class Main { 17 public static void main(String[] args) { 18 List<Integer> list = new MyList(List.of(3, 1, 4)); 19 for(int e: list) { 20 System.out.println(e); 21 } 22 } 23}

実行結果 Wandbox

イテレータが作られてるよ! 3 1 4

参考

The enhanced for statement is equivalent to a basic for statement of the form:

Java

for (I #i = Expression.iterator(); #i.hasNext(); ) {
{VariableModifier} TargetType Identifier =
(TargetType) #i.next();
Statement
}

#i is an automatically generated identifier that is distinct from any other identifiers (automatically generated or otherwise) that are in scope (§6.3) at the point where the enhanced for statement occurs.

引用元Java Language Specification - The enhanced for statement

投稿2020/10/31 08:58

編集2020/10/31 09:15
LouiS0616

総合スコア35668

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問