摘要:迭代器接口定義通過反復調(diào)用方法可以逐個訪問集合中的每個元素。的迭代器是指向兩個元素中間的位置。好在鏈表迭代器可以檢測這種狀況?,F(xiàn)在向如下方式插入通過得到迭代器后的狀態(tài)如下圖后此時,迭代器在和之間。調(diào)用之后將插入到迭代器的前面,的后面。
java迭代器 Iterator 接口定義
public interface Iterator{ E next(); boolean hasNext(); void remove(); default void forEachRemaining(Consumer super E> action); }
通過反復調(diào)用 next 方法,可以逐個訪問集合中的每個元素。但是,如果到達了集合的末尾,next 方法將拋出一個 NoSuchElementException??梢酝ㄟ^調(diào)用hasNext方法判斷是否到達了末尾。java的迭代器是指向兩個元素中間的位置。調(diào)用next會將迭代器從上一個元素中間的位置移動到下一個元素中間的位置,期間返回跨過的元素。remove跟next是有依賴關(guān)系的,remove刪除的是next跨過的元素,如果在調(diào)用remove之前沒有調(diào)用next將會得到一個IllegalStateException異常。例如,下面從一個集合中刪除一個元素
Iteratorit = integerList.iterator(); it.next(); it.remove(); //會刪掉第一個元素 it.remove(); //拋出IllegalStateException異常
第一次remove刪除第一個元素,但是第二個remove會拋出IllegalStateException異常。因為調(diào)用第二次remove之前沒有調(diào)用next,next沒有跨過某個元素。
it.remove(); //會刪掉第一個元素 it.next(); it.remove(); //正確
在兩個remove之間再調(diào)用一次next,第二次remove就正確了。
沖突檢測想象一下,現(xiàn)有鏈表:1,2,3,4。同時存在兩個迭代器it1,it2,都指向1和2之間,如果按下面這段代碼這樣操作:
it1.next(); it1.remove(); it2.next()
it1已經(jīng)將2刪除,而it2需要返回2,這就出現(xiàn)了混亂狀況。好在鏈表迭代器可以檢測這種狀況。如果向上述代碼一樣一個迭代器訪問,一個迭代器修改或是被自身的某個方法修改了,就會拋出一個ConcurrentModificationException異常。
ListIterator add方法Listlterator 接口是 Iterator 的一個子接口。它定義了一個方法用于在迭代器位置前面增加一個元素:
void add(E element)
剛才前面說了,迭代器指向的是兩個元素中間的位置。假設(shè)現(xiàn)在有個序列:1,2,3。現(xiàn)在向如下方式插入:
ListIteratorit = intArray.listIterator(); it.add(3); it.add(4);
通過intArray.listIterator()得到迭代器后的狀態(tài)如下圖:
it.add(3) 后:
此時,迭代器在3和1之間。調(diào)用 it.add(4) 之后:
將4插入到迭代器的前面,3的后面。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/77858.html
摘要:與在迭代器中的設(shè)計在中,最典型的與就是關(guān)于迭代器的設(shè)計。缺點是,迭代器不能正確及時的反應集合中的內(nèi)容,而且一定程度上也增加了內(nèi)存的消耗。 fail-fast與fail-safe簡介 如果一個系統(tǒng),當有異常或者錯誤發(fā)生時就立即中斷執(zhí)行,這種設(shè)計稱之為fail-fast。相反如果我們的系統(tǒng)可以在某種異常或者錯誤發(fā)生時繼續(xù)執(zhí)行,不會被中斷,這種設(shè)計稱之為fail-safe。 fail-fas...
摘要:接口也是集合中的一員,但它與接口有所不同,接口與接口主要用于存儲元素,而主要用于迭代訪問即遍歷中的元素,因此對象也被稱為迭代器。迭代器的實現(xiàn)原理我們在之前案例已經(jīng)完成了遍歷集合的整個過程。 【Collection、泛型】 主要內(nèi)容 Collection集合 迭代器 增強for 泛型 教學目標 [ ] 能夠說出集合與數(shù)組的區(qū)別 [ ] 說出Collection集合的常用功能 [ ]...
摘要:第三階段常見對象的學習集合框架接口按照集合框架的繼承體系,我們先從中的接口開始學習一概述及功能演示概述在中充當著一個什么樣的身份呢有序的也稱為序列實現(xiàn)這個接口的用戶以對列表中每個元素的插入位置進行精確地控制。線程不安全,效率高。 第三階段 JAVA常見對象的學習 集合框架——List接口 showImg(https://segmentfault.com/img/remote/14600...
摘要:具體原因在后面說明是必須實現(xiàn)的接口,返回了一個迭代器。迭代器,可以對已知集合進行遍歷操作。這里可以看出,循環(huán)最終其實是會使用方法獲取迭代器,來完成遍歷。 概述 迭代器,提供了在不了解集合內(nèi)部實現(xiàn)方法的時候遍歷集合的能力??梢詫⑷萜鲀?nèi)部實現(xiàn)與遍歷操作隔離、解耦。 使用迭代器實現(xiàn)一個簡單集合 通過自定義一個簡單集合,并在對其使用迭代器進行遍歷,達到掌握迭代器的目的。 集合描述 一個簡單的集...
摘要:集合框架的基本接口類層次結(jié)構(gòu)其中表示接口,表示實現(xiàn)類和在實際開發(fā)中,需要將使用的對象存儲于特定數(shù)據(jù)結(jié)構(gòu)的容器中。實例是迭代器,擁有兩個方法方法迭代器用于遍歷集合元素。返回值則是轉(zhuǎn)換后的數(shù)組,該數(shù)組會保存集合中的所有元素。 Java Collections Framework是Java提供的對集合進行定義,操作,和管理的包含一組接口,類的體系結(jié)構(gòu)。 Java集合框架的基本接口/類層次結(jié)構(gòu)...
摘要:迭代器智能嗎第一步,將列表中的根節(jié)點找出來。源碼翻開中迭代器的源碼。在迭代器對象執(zhí)行操作之前,都會執(zhí)行方法,以判斷當前操作下是否安全。 引言 ConcurrentModificationException這個異常大家都很熟悉,當在forEach進行刪除時都會出現(xiàn)該異常。 如果你還不了解,請參考澍澍的博客:關(guān)于在list循環(huán)的過程中進行刪除的處理 - 晨澍的博客 showImg(http...
閱讀 3659·2021-11-15 11:36
閱讀 1152·2021-11-11 16:55
閱讀 842·2021-10-20 13:47
閱讀 3144·2021-09-29 09:35
閱讀 3787·2021-09-08 10:45
閱讀 2632·2019-08-30 15:44
閱讀 949·2019-08-30 11:10
閱讀 1500·2019-08-29 13:43