Iterator原理
Iterator用於遍歷集合中的元素,適用於不知道集合內部結構的情況。使用者不再與集合類互動,而是與Iterator互動,其清楚知道集合類的內部狀態,通過控制iterator達到遍歷集合的目的。
public static void iteratorDemo(){
List<String> list=new ArrayList<String>();
list.add("xiaoming");
list.add("zhongji");
Iterator it=list.iterator();
while(it.hasNext()){
String str=it.next();
system.out.println(str);
}
}
1 java API中Iterator介面
public Interface Iterator<E>{
boolean hasNext();
Object next();
void remove();
}
其中:
hasnext()是判斷語句,表示集合中元素是否遍歷完
next()相當於指標,返回Object物件,需要強轉為需要的型別
remove()刪除集合中元素,不常用。
注意:next()是從前往後遍歷,若想向前遍歷,可以使用繼承Iterator介面的ListIterator介面,其含有E previous()
方法,可以向前遍歷集合元素。但要注意只有List可以使用ListIterator介面(連結串列迭代器),只有其含有ListIterator()方便,返回ListIterator<E>
物件。
2 迭代器的實現原理
通過上述的分析可知迭代器是取出集合元素的方式。我們知道一個規則想去訪問另一個規則中的方法,可以用內部類。如下圖:
Collection是集合頂層介面,含有兩個子介面List和Set,然後又有分別實現介面的類。通過檢視jdk原始碼,每個集合類內部都含有Iterator<E> iterator()
方法,該方法是返回集合中迭代器物件。獲取迭代器物件後,就可以使用hasNext、next方法操作集合中的元素了(遍歷)。如果仔細分析下,不難得出如下結論:
每個集合類內部都含有一個內部類,用來實現Iterator介面。集合類的iterator方法就是在獲取內部類物件(迭代器物件),然後通過該物件呼叫hashNext和next方法實現遍歷。
3 下面以ArrayList原始碼分析jdk中如何實現Iterator
class ArrayList{
public Iterator<E> iterator(){return new Itr();}
class Itr implements Iterator{
public hasNext(){……}//重寫這兩個方法,實現元素遍歷
public next(){……}
}
}
通過內部類,我們才可以使用諸如list.iterator().hasNext()這樣的方法。
不過在分析HashSet時,沒有找到內部類,進行重寫hasNext、next方法,這個就不知道具體原因了,希望大家能給予解答。
相關文章
- Iterator模式模式
- Symbol.iteratorSymbol
- Iterator和ListIterator
- Iterator & foreach
- Iterator迭代器
- java容器-IteratorJava
- java使用iteratorJava
- 迭代器 iterator
- iterator移動
- CUJ:標準庫:定義iterator和const iterator (轉)
- 迭代器模式(Iterator)模式
- Iterator 和 for…of 迴圈
- Iterator及Enumeration
- Android Iterator 使用Android
- STL iterator delete problemdelete
- JavaScript Iterator遍歷器JavaScript
- 【java】【集合】迭代器IteratorJava
- PHP迭代器Iterator介面PHP
- vector和iterator及collection
- STL之迭代器(iterator)
- 【generatory與iterator】的應用
- JS 中的 Iterator, Generator, asyncJS
- PHP中的 Iterator 與 GeneratorPHP
- C++ STL迭代器(iterator)C++
- Java基礎Iterator迭代器Java
- 談談設計模式 —— Iterator設計模式
- ECMAScript Iterator和for...of迴圈
- ES6之Iterator、Generator
- s:iterator標籤的使用
- Java中Collection和Iterator介面Java
- webwork iterator標籤的用法Web
- Iterator模式的幾種用法模式
- python generator iterator和iterable objectPythonObject
- Java 集合(2)之 Iterator 迭代器Java
- PHP遍歷介面Iterator詳解PHP
- Java集合學習記錄——IteratorJava
- es6 Iterator遍歷器
- 173. Binary Search Tree Iterator