原文獻上, 點擊滴滴滴 迭代器模式(Iterator)定義: 提供一種方法順序訪問聚合對象的各個元素嗎而又不暴露該對象的內部展示 不用Iterator的壞處 原文中編寫了三個簡單的集合 ArraryList HashSet LinkedList 原先是沒有實現Iterable 內部沒有具體實現ite ...
迭代器模式(Iterator)定義: 提供一種方法順序訪問聚合對象的各個元素嗎而又不暴露該對象的內部展示
不用Iterator的壞處
- 原文中編寫了三個簡單的集合 ArraryList HashSet LinkedList 原先是沒有實現Iterable 內部沒有具體實現iterator
- 問題1: 遍歷的時候遍歷了幾次
- 使用數組遍歷的時候實際是遍歷了兩次, 由於System.arrayCopy 和 set的 toArray 看不到源碼, 但是LinkedList 可以看到鏈表遍歷了一次, 然後我們再遍歷這個數組, 列印
- 問題2: 如何解決這個問題
- 可以給 LinkedList ArrayList 加get(index)的方法遍歷, 但是HashSet就沒法了, 實際上是Map的key集合, 無序的, 實際上這裡面linkedList的get 比較麻煩了, 所以有查詢的性能的問題
- 總結: 牛人左哥: "那就用迭代器模式吧"
看迭代器模式與非迭代的UML區別
- 很相似, 但迭代器模式有個介面這個概念
- 遍歷對象的區間
迭代器模式有哪些說不上的缺點
- 具體的集合類與具體的迭代器是綁定的關係, 這種實現方式幾乎沒有復用的可能, 可以看著是特事特辦, 算是把雙刃劍, 權衡自己把握
class文件的描述
- 以前重來都沒有去嘗試解析
- 現在先記下
- invoke 調用 virtual(實現類)方法 interface(介面)方法
- astore 賦值棧
_3
第3+1
個引用變數- aload 壓入值棧
_3
第3+1
個引用變數- checkcast 檢測類型轉換
- getStatic 獲取靜態屬性
- ifne 如果返回true就 執行