国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

java迭代器

蘇丹 / 619人閱讀

摘要:迭代器接口定義通過(guò)反復(fù)調(diào)用方法可以逐個(gè)訪問(wèn)集合中的每個(gè)元素。的迭代器是指向兩個(gè)元素中間的位置。好在鏈表迭代器可以檢測(cè)這種狀況。現(xiàn)在向如下方式插入通過(guò)得到迭代器后的狀態(tài)如下圖后此時(shí),迭代器在和之間。調(diào)用之后將插入到迭代器的前面,的后面。

java迭代器 Iterator 接口定義
public interface Iterator { 
    E next(); 
    boolean hasNext();
    void remove(); 
    default void forEachRemaining(Consumer action); 
    }

通過(guò)反復(fù)調(diào)用 next 方法,可以逐個(gè)訪問(wèn)集合中的每個(gè)元素。但是,如果到達(dá)了集合的末尾,next 方法將拋出一個(gè) NoSuchElementException。可以通過(guò)調(diào)用hasNext方法判斷是否到達(dá)了末尾。java的迭代器是指向兩個(gè)元素中間的位置。調(diào)用next會(huì)將迭代器從上一個(gè)元素中間的位置移動(dòng)到下一個(gè)元素中間的位置,期間返回跨過(guò)的元素。remove跟next是有依賴關(guān)系的,remove刪除的是next跨過(guò)的元素,如果在調(diào)用remove之前沒(méi)有調(diào)用next將會(huì)得到一個(gè)IllegalStateException異常。例如,下面從一個(gè)集合中刪除一個(gè)元素

Iterator it = integerList.iterator();
it.next();
it.remove(); //會(huì)刪掉第一個(gè)元素
it.remove(); //拋出IllegalStateException異常

第一次remove刪除第一個(gè)元素,但是第二個(gè)remove會(huì)拋出IllegalStateException異常。因?yàn)檎{(diào)用第二次remove之前沒(méi)有調(diào)用next,next沒(méi)有跨過(guò)某個(gè)元素。

it.remove(); //會(huì)刪掉第一個(gè)元素
it.next();
it.remove(); //正確

在兩個(gè)remove之間再調(diào)用一次next,第二次remove就正確了。

沖突檢測(cè)

想象一下,現(xiàn)有鏈表:1,2,3,4。同時(shí)存在兩個(gè)迭代器it1,it2,都指向1和2之間,如果按下面這段代碼這樣操作:

it1.next();
it1.remove();
it2.next()

it1已經(jīng)將2刪除,而it2需要返回2,這就出現(xiàn)了混亂狀況。好在鏈表迭代器可以檢測(cè)這種狀況。如果向上述代碼一樣一個(gè)迭代器訪問(wèn),一個(gè)迭代器修改或是被自身的某個(gè)方法修改了,就會(huì)拋出一個(gè)ConcurrentModificationException異常。

ListIterator add方法

Listlterator 接口是 Iterator 的一個(gè)子接口。它定義了一個(gè)方法用于在迭代器位置前面增加一個(gè)元素:
void add(E element)
剛才前面說(shuō)了,迭代器指向的是兩個(gè)元素中間的位置。假設(shè)現(xiàn)在有個(gè)序列:1,2,3。現(xiàn)在向如下方式插入:

ListIterator it = intArray.listIterator();
it.add(3);
it.add(4);

通過(guò)intArray.listIterator()得到迭代器后的狀態(tài)如下圖:
8511c18bc8182c6a79eb51f1e4eee3f3.png
it.add(3) 后:
de3d29aa7283fd924c29d34df9c66499.png
此時(shí),迭代器在3和1之間。調(diào)用 it.add(4) 之后:
1a1b74acddae126df927cc2b20e3917a.png
將4插入到迭代器的前面,3的后面。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/77858.html

相關(guān)文章

  • fail-fast與fail-safe在Java集合中的應(yīng)用

    摘要:與在迭代器中的設(shè)計(jì)在中,最典型的與就是關(guān)于迭代器的設(shè)計(jì)。缺點(diǎn)是,迭代器不能正確及時(shí)的反應(yīng)集合中的內(nèi)容,而且一定程度上也增加了內(nèi)存的消耗。 fail-fast與fail-safe簡(jiǎn)介 如果一個(gè)系統(tǒng),當(dāng)有異常或者錯(cuò)誤發(fā)生時(shí)就立即中斷執(zhí)行,這種設(shè)計(jì)稱之為fail-fast。相反如果我們的系統(tǒng)可以在某種異常或者錯(cuò)誤發(fā)生時(shí)繼續(xù)執(zhí)行,不會(huì)被中斷,這種設(shè)計(jì)稱之為fail-safe。 fail-fas...

    Drummor 評(píng)論0 收藏0
  • java的集合和泛型的知識(shí)點(diǎn)歸納1

    摘要:接口也是集合中的一員,但它與接口有所不同,接口與接口主要用于存儲(chǔ)元素,而主要用于迭代訪問(wèn)即遍歷中的元素,因此對(duì)象也被稱為迭代器。迭代器的實(shí)現(xiàn)原理我們?cè)谥鞍咐呀?jīng)完成了遍歷集合的整個(gè)過(guò)程。 【Collection、泛型】 主要內(nèi)容 Collection集合 迭代器 增強(qiáng)for 泛型 教學(xué)目標(biāo) [ ] 能夠說(shuō)出集合與數(shù)組的區(qū)別 [ ] 說(shuō)出Collection集合的常用功能 [ ]...

    daryl 評(píng)論0 收藏0
  • Java集合框架——List接口

    摘要:第三階段常見(jiàn)對(duì)象的學(xué)習(xí)集合框架接口按照集合框架的繼承體系,我們先從中的接口開(kāi)始學(xué)習(xí)一概述及功能演示概述在中充當(dāng)著一個(gè)什么樣的身份呢有序的也稱為序列實(shí)現(xiàn)這個(gè)接口的用戶以對(duì)列表中每個(gè)元素的插入位置進(jìn)行精確地控制。線程不安全,效率高。 第三階段 JAVA常見(jiàn)對(duì)象的學(xué)習(xí) 集合框架——List接口 showImg(https://segmentfault.com/img/remote/14600...

    褰辯話 評(píng)論0 收藏0
  • 一篇文章看懂java迭代

    摘要:具體原因在后面說(shuō)明是必須實(shí)現(xiàn)的接口,返回了一個(gè)迭代器。迭代器,可以對(duì)已知集合進(jìn)行遍歷操作。這里可以看出,循環(huán)最終其實(shí)是會(huì)使用方法獲取迭代器,來(lái)完成遍歷。 概述 迭代器,提供了在不了解集合內(nèi)部實(shí)現(xiàn)方法的時(shí)候遍歷集合的能力。可以將容器內(nèi)部實(shí)現(xiàn)與遍歷操作隔離、解耦。 使用迭代器實(shí)現(xiàn)一個(gè)簡(jiǎn)單集合 通過(guò)自定義一個(gè)簡(jiǎn)單集合,并在對(duì)其使用迭代器進(jìn)行遍歷,達(dá)到掌握迭代器的目的。 集合描述 一個(gè)簡(jiǎn)單的集...

    kyanag 評(píng)論0 收藏0
  • 集合概要學(xué)習(xí)---粗略

    摘要:集合框架的基本接口類層次結(jié)構(gòu)其中表示接口,表示實(shí)現(xiàn)類和在實(shí)際開(kāi)發(fā)中,需要將使用的對(duì)象存儲(chǔ)于特定數(shù)據(jù)結(jié)構(gòu)的容器中。實(shí)例是迭代器,擁有兩個(gè)方法方法迭代器用于遍歷集合元素。返回值則是轉(zhuǎn)換后的數(shù)組,該數(shù)組會(huì)保存集合中的所有元素。 Java Collections Framework是Java提供的對(duì)集合進(jìn)行定義,操作,和管理的包含一組接口,類的體系結(jié)構(gòu)。 Java集合框架的基本接口/類層次結(jié)構(gòu)...

    DesGemini 評(píng)論0 收藏0
  • Java 迭代引發(fā) ConcurrentModificationException

    摘要:迭代器智能嗎第一步,將列表中的根節(jié)點(diǎn)找出來(lái)。源碼翻開(kāi)中迭代器的源碼。在迭代器對(duì)象執(zhí)行操作之前,都會(huì)執(zhí)行方法,以判斷當(dāng)前操作下是否安全。 引言 ConcurrentModificationException這個(gè)異常大家都很熟悉,當(dāng)在forEach進(jìn)行刪除時(shí)都會(huì)出現(xiàn)該異常。 如果你還不了解,請(qǐng)參考澍澍的博客:關(guān)于在list循環(huán)的過(guò)程中進(jìn)行刪除的處理 - 晨澍的博客 showImg(http...

    用戶83 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<