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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Iterator(迭代器)遍历Collection集合元素

發布時間:2025/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Iterator(迭代器)遍历Collection集合元素 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Iterator(迭代器)是一個接口,它的作用就是遍歷容器的所有元素,也是 Java 集合框架的成員,但它與 Collection 和 Map 系列的集合不一樣,Collection 和 Map 系列集合主要用于盛裝其他對象,而 Iterator 則主要用于遍歷(即迭代訪問)Collection 集合中的元素。

Iterator 接口隱藏了各種 Collection 實現類的底層細節,向應用程序提供了遍歷 Collection 集合元素的統一編程接口。Iterator 接口里定義了如下 4 個方法。

boolean hasNext():如果被迭代的集合元素還沒有被遍歷完,則返回 true。Object next():返回集合里的下一個元素。void remove():刪除集合里上一次 next 方法返回的元素。void forEachRemaining(Consumer action):這是 Java 8 為 Iterator 新增的默認方法,該方法可使用 Lambda 表達式來遍歷集合元素。

通過 Iterator 接口來遍歷集合元素。

import java.util.Collection; import java.util.HashSet; import java.util.Iterator;public class IteratorTest {public static void main(String[] args) {// 創建一個集合Collection objs = new HashSet();objs.add("Java教程");objs.add("C語言教程");objs.add("python教程");// 調用forEach()方法遍歷集合// 獲取books集合對應的迭代器Iterator it = objs.iterator();while (it.hasNext()) {// it.next()方法返回的數據類型是Object類型,因此需要強制類型轉換String obj = (String) it.next();System.out.println(obj);if (obj.equals("百度C語言")) {// 從集合中刪除上一次next()方法返回的元素it.remove();}// 對book變量賦值,不會改變集合元素本身obj = "百度Python語言";}System.out.println(objs);} }

從上面代碼中可以看出,Iterator 僅用于遍歷集合,如果需要創建 Iterator 對象,則必須有一個被迭代的集合。沒有集合的 Iterator 沒有存在的價值。

注意:Iterator 必須依附于 Collection 對象,若有一個 Iterator 對象,則必然有一個與之關聯的 Collection 對象。Iterator 提供了兩個方法來迭代訪問 Collection 集合里的元素,并可通過 remove() 方法來刪除集合中上一次 next() 方法返回的集合元素。

當使用 Iterator 迭代訪問 Collection 集合元素時,Collection 集合里的元素不能被改變,只有通過 Iterator 的 remove() 方法刪除上一次 next() 方法返回的集合元素才可以,否則將會引發“java.util.ConcurrentModificationException”異常。下面程序示范了這一點。

public class IteratorErrorTest {public static void main(String[] args) {// 創建一個集合Collection objs = new HashSet();objs.add("百度Java教程");objs.add("百度C語言教程");objs.add("百度C++教程");// 獲取books集合對應的迭代器Iterator it = objs.iterator();while (it.hasNext()) {String obj = (String) it.next();System.out.println(obj);if (obj.equals("百度C++教程")) {// 使用Iterator迭代過程中,不可修改集合元素,下面代碼引發異常objs.remove(obj);}}} }

輸出結果為:

百度C++教程 Exception in thread "main" java.util.ConcurrentModificationExceptionat java.util.HashMap$HashIterator.nextNode(Unknown Source)at java.util.HashMap$KeyIterator.next(Unknown Source)at IteratorErrorTest.main(IteratorErrorTest.java:15)

第 15 行代碼位于 Iterator 迭代塊內,也就是在 Iterator 迭代 Collection 集合過程中修改了 Collection 集合,所以程序將在運行時引發異常。

Iterator 迭代器采用的是快速失敗(fail-fast)機制,一旦在迭代過程中檢測到該集合已經被修改(通常是程序中的其他線程修改),程序立即引發 ConcurrentModificationException 異常,而不是顯示修改后的結果,這樣可以避免共享資源而引發的潛在問題。

快速失敗(fail-fast)機制,是 Java Collection 集合中的一種錯誤檢測機制。

注意:上面程序如果改為刪除“百度C語言教程”字符串,則不會引發異常。對于 HashSet 以及后面的 ArrayList 等,迭代時刪除元素都會導致異常。只有在刪除集合中的某個特定元素時才不會拋出異常,這是由集合類的實現代碼決定的。

總結

以上是生活随笔為你收集整理的Iterator(迭代器)遍历Collection集合元素的全部內容,希望文章能夠幫你解決所遇到的問題。

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