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