日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

迭代器的简单应用实践

發(fā)布時間:2025/3/17 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 迭代器的简单应用实践 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

迭代器(iterator)有時又稱游標(cursor)是程序設計的軟件設計模式,可在容器(container,例如鏈表或陣列)上遍訪的接口,設計人員無需關心容器的內容。

在遍歷容器時,我們可以使用for循環(huán)或者是增強for循環(huán),但是不同的集合結構在遍歷時,我們要針對集合特點采取不同的方式,比如List是鏈表,我們可以直接當做數組處理,但Map是Key—Value的形式,我們只有獲取了鍵名才能去遍歷集合內容。

很麻煩對吧?
還好JDK為我們提供了一個接口-------Iterator(迭代器),迭代器為各種容器提供了公共的操作接口。這樣使得對容器的遍歷操作與其具體的底層實現(xiàn)相隔離,達到解耦的效果。

查看Iterator的API我們得知,該接口共有3個方法:

查看API發(fā)現(xiàn)Collection實現(xiàn)了該接口,也就是說Collection的所有子實現(xiàn)類可使用Iterator的方法,同時在Collection中定義了一個方法iterator()

使用該方法iterator(),要求容器返回一個Iterator對象。第一次調用Iterator的next()方法時,它返回序列的第一個元素。注意:iterator()方法是java.lang.Iterable接口,被Collection繼承。
那我們如何使用迭代器呢?

示例代碼如下,關鍵代碼的解釋說明已經在注釋部分給出,將不再做贅述。

示例代碼:

/*** + 上海尚學堂 shsxt.com*/ public class TestIterator {public static void main(String[] args) {List<String> list= new ArrayList();list.add("and");list.add("try");list.add("your");list.add("best");//使用迭代器,對集合Arraylist中的元素進行取出//調用集合的方法iterator() 獲取Iterator接口的實現(xiàn)類對象()Iterator<String> it=list.iterator();System.out.println(list.iterator().getClass());//打印的內容是 class java.util.ArrayList$Itr 既是我們的接口的實現(xiàn)類對象//接口實現(xiàn)類對象,調用方法hasNext()判斷集合中是否有元素boolean b = it.hasNext();System.out.println(b);//接口的實現(xiàn)類對象,調用方法next()取出集合中的元素String s = it.next();System.out.println("it.next()"+s);while(it.hasNext()){/** 這里將不會輸出"and",因為我們調用一次hasNext,內部的指針就會指向下一個元素*/System.out.println(it.next());}}}

會遇到的問題(并發(fā)修改異常)
我們來設想如下的場景: 在list集合迭代元素中,對元素進行判斷,一旦條件滿足就添加一個新元素。代碼如下

/*** + VX:java8733 獲取更多資源*/List<String> list2 = new ArrayList<String>();list2.add("abc");list2.add("def");list2.add("g");Iterator<String> it=list2.iterator();while(it.hasNext()){String str=it.next();if("g".equals(str)){//該操作會導致程序異常: ConcurrentModificationExceptionList2.add("b");}}System.out.println(list2);

我們會發(fā)現(xiàn)當我們使用迭代器遍歷元素的時候,通過集合是不能修改元素的。程序拋出異常ConcurrentModificationException,這個異常指的是當方法檢測到對象的并發(fā)修改,但不允許這種修改時,就會拋出此異常。

這是為什么呢? why?

迭代器是依賴于集合而存在的,在判斷成功后,集合的中新添加了元素,而迭代器卻不知道,所以就報錯了,這個錯叫并發(fā)修改異常。

那我們應該如何解決呢?
首先,在迭代時,盡量不要使用集合的方法操作元素。如果要在迭代時對元素操作。我們可以通過ListIterator迭代器來操作元素。

我們可以將上面的代碼做如下的修改就可以操作list中的元素了

/*** 上海尚學堂 shsxt.com*/ListIterator<String> it=list2.listIterator();while(it.hasNext()){String str=it.next();if("a".equals(str)){//子接口ListIterator包含add()方法it.add("b");}}

上海尚學堂Java原創(chuàng)文章,感謝您閱讀,后續(xù)Java技術文章陸續(xù)奉上,請多關注

總結

以上是生活随笔為你收集整理的迭代器的简单应用实践的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。