java中為什麼要使用Iterator,或者Iterator的用途是什麼
阿新 • • 發佈:2018-12-14
我看到用於迭代集合 List l = new ArrayList(); l.add("yyyyy"); l.add("ccccc"); Iterator t = l.iterator(); while(t.hasNext()){ String s = (String)t.next(); System.out.println(s); } 但是不用迭代器可以使用for迴圈來輸出啊 for(int i=0;i<l.size();i++){ System.out.println(l.get(i)); } 解決方法:
Iterator模式是用於遍歷集合類的標準訪問方法。它可以把訪問邏輯從不同型別的集合類中抽象出來,從而避免向客戶端暴露集合的內部結構。 例如,如果沒有使用Iterator,遍歷一個數組的方法是使用索引: for(int i=0; i<array.size(); i++) { ... get(i) ... } 而訪問一個連結串列(LinkedList)又必須使用while迴圈: while((e=e.next())!=null) { ... e.data() ... } 以上兩種方法客戶端都必須事先知道集合的內部結構,訪問程式碼和集合本身是緊耦合,無法將訪問邏輯從集合類和客戶端程式碼中分離出來,每一種集合對應一種遍歷方法,客戶端程式碼無法複用。 更恐怖的是,如果以後需要把ArrayList更換為LinkedList,則原來的客戶端程式碼必須全部重寫。 為解決以上問題,Iterator模式總是用同一種邏輯來遍歷集合: for(Iterator it = c.iterater(); it.hasNext(); ) { ... } 奧祕在於客戶端自身不維護遍歷集合的"指標",所有的內部狀態(如當前元素位置,是否有下一個元素)都由Iterator來維護,而這個Iterator由集合類通過工廠方法生成,因此,它知道如何遍歷整個集合。 客戶端從不直接和集合類打交道,它總是控制Iterator,向它傳送"向前","向後","取當前元素"的命令,就可以間接遍歷整個集合。