迭代器(Iterator)是一個對象,它的工做是遍歷並選擇序列中的對象,它提供了一種訪問一個容器(container)對象中的各個元素,而沒必要暴露該對象內部細節的方法。經過迭代器,開發人員不須要了解容器底層的結構,就能夠實現對容器的遍歷。java
因爲建立迭代器的代價小,所以迭代器一般被稱爲輕量級的容器。微信
Iterator接口也是Java集合框架的成員,但它與Collection系列、Map系列的集合不同:Collection和Map一系列集合主要用於存儲其它對象,而Iterator主要用於遍歷(迭代訪問)Collection集合中的元素。框架
Iterator接口裏定義了以下4個方法:spa
1)boolean hasNext():若是被迭代的集合元素尚未被遍歷完,則返回true。code
2)Object next():返回集合裏的下一個元素。對象
3)void remove():刪除集合裏上一次next方法返回的元素。blog
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,同時支持元素的修改。