Iteratorパターン

1,940 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,940
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Iteratorパターン

  1. 1. Iterator
  2. 2. 2010 年 11 月 18 日新たなヒーローが 生まれた
  3. 3. 反復戦隊イテレーター
  4. 4. あらすじ● 世界の片隅でとあるクソプログラマーにより 偶然作られた唯一神シングルトン。数年後こ れが世界を震撼させるほど凶悪なクソ設計で あることが発覚し、プロジェクトを混乱に陥 れる。月日は流れ、世界は荒廃し、モヒカン がヒャッハー (ry● 五反田のでり坊で飲んだくれていた TDD 伝道 師 t-wada は、世界を救うため先人の知識の集 大成となる新たな概念を生み出したのだっ た。
  5. 5. すべてのはじまり
  6. 6. 反復戦隊イテレーター登場人物● 唯一神シングルトン● 悪の組織ファサード● 調停者メディエーター● 観察者オブザーバー● ぬるぽ ● 敵の雑魚キャラ ● 「ガッ」という音とともに一撃でやられる
  7. 7. 反復戦隊イテレーター必殺技● 絶対防御シンクロナイズドブロック● バッファードアウトプットストリーム● ThreadDeath● 技表 ● Java 言語仕様 ● Javadoc
  8. 8. Iterator パターン
  9. 9. 「反復」という概念をオブジェクト化
  10. 10. List list = ...;// while 文で書くIterator it = list.iterator();while (it.hasNext()) { Object o = it.next(); ...;}// for 文で書くと it のスコープをせまくできるfor (Iterator it = list.iterator(); it.hasNext(); ) { Object o = it.next(); ...;}// for-each loop だと Iterator がコード上から消えるfor (Object o : list) { ...;}
  11. 11. ループインデックス どうしてますか?
  12. 12. List list = ...;// インデックスが欲しいときは素直にマニュアルで管理?Iterator it = list.iterator();int i = 0;while (it.hasNext()) { Object o = it.next(); i++; ...;}// List なら ListIterator という手があるよListIterator it = list.listIterator();while (it.hasNext()) { Object o = it.next(); int i = it.previousIndex(); ...;}
  13. 13. ConcurrentModification Exception
  14. 14. ConcurrentModificationException● Iterator で反復中に元の Collection に要素の追 加もしくは削除を行うと発生● シングルスレッドの場合 ● Iterator.remove() を使うべきところで List.remove() を呼んでしまうというミス● マルチスレッドの場合 ● synchronized ブロックでガードする ● 反復対象の Collection の複製を作ってから反復する
  15. 15. Iterator まとめ● 「反復」オブジェクト● ListIterator かわいいよ● ConcurrentModificationException 気をつけて

×