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

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

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

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

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

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

二、Iterator 的核心方法

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

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

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

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

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

完整使用示例

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()) { // 判斷是否有下一個(gè)元素
            String fruit = it.next(); // 移動(dòng)指針并獲取元素
            System.out.println(fruit);
 
            // 4. 可選:遍歷中刪除指定元素(比如刪除"香蕉")
            if ("香蕉".equals(fruit)) {
                it.remove(); // 安全刪除,不會(huì)觸發(fā)并發(fā)修改異常
            }
        }
 
        // 遍歷結(jié)束后查看集合
        System.out.println("\n刪除香蕉后的集合:" + list); // 輸出:[蘋果, 橙子, 葡萄]
    }
}

四、迭代器的關(guān)鍵注意事項(xiàng)(避坑重點(diǎn))

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

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

// 錯(cuò)誤示例:遍歷中直接用集合的 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(),會(huì)拋出 IllegalStateException(非法狀態(tài)異常)。因?yàn)?remove() 只能刪除 “上一次 next () 獲取的元素”,沒有 next () 就沒有可刪除的元素。

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

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

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

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

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

總結(jié)

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

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

相關(guān)文章

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

    RocketMQ?broker文件清理源碼解析

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

    Java源碼難點(diǎn)突破Lambda表達(dá)式執(zhí)行原理

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

    JavaWeb中Tomcat底層機(jī)制和Servlet運(yùn)行原理詳解

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

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

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

    MyBatis Example And與Or混合使用的實(shí)例

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

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

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

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

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

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

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

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

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

    Spring?Data?Jpa框架最佳實(shí)踐示例

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

最新評論

克什克腾旗| 新建县| 巢湖市| 南澳县| 武义县| 永靖县| 靖安县| 阳泉市| 河池市| 玉屏| 淅川县| 东港市| 西青区| 肥西县| 河池市| 梅州市| 临澧县| 仁怀市| 盐池县| 循化| 安宁市| 河北省| 正定县| 托克托县| 华容县| 新兴县| 大埔县| 林州市| 黑水县| 金山区| 津南区| 察隅县| 天峻县| 万宁市| 马鞍山市| 安陆市| 德化县| 巴彦淖尔市| 桐庐县| 元江| 安宁市|