最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中Collection迭代器的實現(xiàn)

 更新時間:2026年01月13日 09:41:04   作者:專注于大數(shù)據(jù)技術棧  
Java迭代器是遍歷Collection集合的標準工具,提供hasNext()、next()和remove()三個核心方法,下面就來介紹一下Collection迭代器的實現(xiàn),感興趣的可以了解一下

一、迭代器(Iterator)是什么?

Iterator 是 Java 集合框架中專門用于遍歷 Collection 集合元素的接口(位于 java.util 包下),它為所有實現(xiàn) Collection 接口的集合(如 ArrayList、HashSet 等)提供了統(tǒng)一的遍歷方式

你可以把迭代器理解為一個 “集合的專屬遍歷工具”:它就像一個指針,一開始指向集合第一個元素的 “前面”,通過調(diào)用方法可以逐個移動指針、獲取元素,而且能安全地在遍歷過程中刪除元素(這是普通 for 循環(huán)做不到的)。

二、Iterator 的核心方法

Iterator 接口只有 3 個核心方法,簡單且易記:

方法作用
boolean hasNext()判斷當前指針后面是否還有元素,有則返回 true,無則返回 false
E next()① 將指針向后移動一位 ② 返回當前指針指向的元素
void remove()刪除上一次調(diào)用 next () 時返回的元素(遍歷中安全刪除元素的關鍵)

三、Iterator 的基本使用步驟(核心)

使用迭代器遍歷 Collection 集合的固定步驟:

  1. 通過 Collection 的 iterator() 方法獲取迭代器對象;
  2. 用 hasNext() 判斷是否還有下一個元素;
  3. 用 next() 獲取下一個元素;
  4. (可選)用 remove() 刪除當前元素。

完整使用示例

import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
 
public class IteratorDemo {
    public static void main(String[] args) {
        // 1. 創(chuàng)建集合并添加元素
        Collection<String> list = new ArrayList<>();
        list.add("蘋果");
        list.add("香蕉");
        list.add("橙子");
        list.add("葡萄");
 
        // 2. 獲取迭代器對象
        Iterator<String> it = list.iterator();
 
        // 3. 遍歷集合
        System.out.println("遍歷并輸出所有元素:");
        while (it.hasNext()) { // 判斷是否有下一個元素
            String fruit = it.next(); // 移動指針并獲取元素
            System.out.println(fruit);
 
            // 4. 可選:遍歷中刪除指定元素(比如刪除"香蕉")
            if ("香蕉".equals(fruit)) {
                it.remove(); // 安全刪除,不會觸發(fā)并發(fā)修改異常
            }
        }
 
        // 遍歷結束后查看集合
        System.out.println("\n刪除香蕉后的集合:" + list); // 輸出:[蘋果, 橙子, 葡萄]
    }
}

四、迭代器的關鍵注意事項(避坑重點)

調(diào)用 next () 前必須先調(diào)用 hasNext ()如果指針已經(jīng)到集合末尾,直接調(diào)用 next() 會拋出 NoSuchElementException(無此元素異常),這是新手最容易犯的錯誤。

遍歷過程中不能用集合的 remove () 方法如果在迭代器遍歷期間,直接調(diào)用 collection.remove()(而非 it.remove()),會觸發(fā) ConcurrentModificationException(并發(fā)修改異常)。因為迭代器會檢測集合的 “修改次數(shù)”,一旦發(fā)現(xiàn)迭代器之外的修改,就會報錯。

// 錯誤示例:遍歷中直接用集合的 remove 方法
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String fruit = it.next();
    if ("香蕉".equals(fruit)) {
        list.remove(fruit); // 拋出 ConcurrentModificationException
    }
}

remove () 必須在 next () 之后調(diào)用如果先調(diào)用 it.remove() 再調(diào)用 it.next(),或者連續(xù)調(diào)用兩次 it.remove(),會拋出 IllegalStateException(非法狀態(tài)異常)。因為 remove() 只能刪除 “上一次 next () 獲取的元素”,沒有 next () 就沒有可刪除的元素。

迭代器遍歷是單向的迭代器只能從前往后遍歷,一旦遍歷到末尾,無法回頭重新遍歷,除非重新獲取一個新的迭代器對象。

五、增強 for 循環(huán)(foreach)與迭代器的關系

你平時用的增強 for 循環(huán)(for (元素類型 變量 : 集合))本質(zhì)上是迭代器的語法糖,編譯器會自動將其編譯為迭代器遍歷的代碼。比如:

// 增強 for 循環(huán)遍歷
for (String fruit : list) {
    System.out.println(fruit);
}
 
// 編譯器編譯后等價于:
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    String fruit = it.next();
    System.out.println(fruit);
}

?? 注意:增強 for 循環(huán)同樣不能在遍歷中直接修改集合(比如刪除元素),否則也會拋出 ConcurrentModificationException。

總結

  1. Iterator 是遍歷 Collection 集合的標準工具,提供 hasNext()、next()remove() 三個核心方法,保證遍歷的統(tǒng)一性和安全性。
  2. 迭代器使用的核心規(guī)則:先 hasNext() 判斷,再 next() 獲取,遍歷中刪除元素必須用 it.remove() 而非集合的 remove()。
  3. 增強 for 循環(huán)是迭代器的語法糖,本質(zhì)相同,但無法手動調(diào)用 remove(),遍歷中修改集合仍會報錯。

 到此這篇關于java中Collection迭代器的實現(xiàn)的文章就介紹到這了,更多相關java Collection迭代器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • RocketMQ?broker文件清理源碼解析

    RocketMQ?broker文件清理源碼解析

    這篇文章主要為大家介紹了RocketMQ?broker文件清理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • Java源碼難點突破Lambda表達式執(zhí)行原理

    Java源碼難點突破Lambda表達式執(zhí)行原理

    這篇文章主要為大家介紹了Java難點突破Lambda表達式執(zhí)行原理分析及示例的實現(xiàn)源碼,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2022-03-03
  • JavaWeb中Tomcat底層機制和Servlet運行原理詳解

    JavaWeb中Tomcat底層機制和Servlet運行原理詳解

    這篇文章主要介紹了JavaWeb中Tomcat底層機制和Servlet運行原理詳解,Tomcat是一個開源的Java Web服務器,它是基于Java Servlet和JavaServer Pages(JSP)技術的,下面是關于Tomcat底層機制和Servlet運行原理的簡要說明,需要的朋友可以參考下
    2023-10-10
  • Spring?AOP配置文件方式入門教程詳解

    Spring?AOP配置文件方式入門教程詳解

    spring aop是一個面向切面的編程,在自己第一遍學習的時候,感覺aop沒有什么作用,但是真實接觸下來,感覺spring aop還是很有用途的,這篇文章主要介紹了Spring?AOP配置文件方式入門教程的相關資料,需要的朋友可以參考下
    2025-11-11
  • MyBatis Example And與Or混合使用的實例

    MyBatis Example And與Or混合使用的實例

    這篇文章主要介紹了MyBatis Example And與Or混合使用的實例,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Spring?AOP的注解實現(xiàn)方式實例詳解

    Spring?AOP的注解實現(xiàn)方式實例詳解

    AOP是一種對某一類事情集中處理的思想,本文給大家介紹Spring?AOP的注解實現(xiàn)方式實例詳解,感興趣的朋友一起看看吧
    2025-04-04
  • Java使用開源Rxtx實現(xiàn)串口通訊

    Java使用開源Rxtx實現(xiàn)串口通訊

    這篇文章主要為大家詳細介紹了Java使用開源Rxtx實現(xiàn)串口通訊,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-12-12
  • Java 獲取當前系統(tǒng)時間的三種方法

    Java 獲取當前系統(tǒng)時間的三種方法

    這篇文章主要介紹了Java 獲取當前系統(tǒng)時間的三種方法,幫助大家利用Java處理時間,感興趣的朋友可以了解下
    2020-10-10
  • @PathVariable獲取路徑中帶有 / 斜杠的解決方案

    @PathVariable獲取路徑中帶有 / 斜杠的解決方案

    這篇文章主要介紹了@PathVariable獲取路徑中帶有 / 斜杠的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring?Data?Jpa框架最佳實踐示例

    Spring?Data?Jpa框架最佳實踐示例

    這篇文章主要為大家介紹了Spring?Data?Jpa框架最佳實踐示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-02-02

最新評論

镇宁| 永寿县| 千阳县| 海城市| 西青区| 平安县| 云霄县| 陆丰市| 尉犁县| 板桥市| 桐庐县| 大足县| 山阳县| 五常市| 阿克陶县| 宾川县| 襄汾县| SHOW| 如皋市| 类乌齐县| 昌图县| 英超| 礼泉县| 新余市| 江源县| 来凤县| 遂昌县| 九龙坡区| 姜堰市| 温泉县| 五莲县| 乌鲁木齐县| 朝阳区| 商河县| 商洛市| 临泽县| 卢湾区| 将乐县| 沂源县| 武冈市| 精河县|