迭代器(Iterator)是一個對象,它的工作是遍歷並選擇序列中的對象,它提供了一種訪問一個容器(container)對象中的各個元素,而不必暴露該對象內部細節的方法。通過迭代器,開發人員不需要瞭解容器底層的結構,就可以實現對容器的遍歷。 由於創建迭代器的代價小,因此迭代器通常被稱為輕量級的容器。 ...
迭代器(Iterator)是一個對象,它的工作是遍歷並選擇序列中的對象,它提供了一種訪問一個容器(container)對象中的各個元素,而不必暴露該對象內部細節的方法。通過迭代器,開發人員不需要瞭解容器底層的結構,就可以實現對容器的遍歷。
由於創建迭代器的代價小,因此迭代器通常被稱為輕量級的容器。
Iterator介面也是Java集合框架的成員,但它與Collection系列、Map系列的集合不一樣:Collection和Map一系列集合主要用於存儲其它對象,而Iterator主要用於遍歷(迭代訪問)Collection集合中的元素。
Iterator介面里定義瞭如下4個方法:
1)boolean hasNext():如果被迭代的集合元素還沒有被遍歷完,則返回true。
2)Object next():返回集合里的下一個元素。
3)void remove():刪除集合里上一次next方法返回的元素。
4)void forEachRemaining(Consumer action),這是Java8為Iterator新增的預設方法,該方法可使用Lambda表達式來遍歷集合元素。
下麵程式示範了通過Iterator介面來遍歷集合元素。
public class IteratorTest{ public static void main(String[] args){ List<String> strList = new ArrayList<>(); strList.add("111"); strList.add("222"); strList.add("333"); Iterator it = strList.iterator(); while(it.hasNext()){ String str = (String)it.next(); Sysye.out.println(str); if(str.equals("222")){ it.remove(); } //對str賦值,不會改變集合本身 str = "000"; } } }
當使用Iterator迭代訪問Collection集合元素時,Collection集合里的元素不能被改變,只有通過Iterator 的remove()方法刪除上一次next()方法返回的集合元素才可以;否則將會引發java.util.ConcurrentModificationException異常。
歡迎關註微信公眾號【Java典籍】,收看更多Java技術乾貨!
▼微信掃一掃下圖↓↓↓二維碼關註
引申:Iterator 與ListIterator 有何區別?
Iterator 只能正向遍歷集合,適用於獲取移除元素。ListIterator 繼承自Iterator ,專門針對List,可以從兩個方向來遍歷list,同時支持元素的修改。