聊一聊Iterable與Iterator的那些事!

2021-09-24 08:15:20 字數 2105 閱讀 9807

涉及面試題:

上面的面試題可以看出,其實都是一回事,只是換了一種提問方式,只要我們能掌握核心要點,隨便面試官怎麼提問,我們都能輕鬆應對!

由原始碼圖可以看出,iterable有三個方法,分別是

接下來我們簡單介紹下這裡面的方法。

iteratoriterator();

複製**

該介面主要是返回t型別的元素上的乙個迭代器。下面再詳細介紹iterator。

default void foreach(consumer<? super t> action) 

}複製**

該方法是迴圈輸出,對內部元素進行遍歷,並對元素進行指定的操作。例如:

listnumbers = arrays.aslist(1, 2, 3, 4, 5, 6, 7, 8, 9);

numbers.foreach(integer -> system.out.println(integer));

複製**

對原始碼注釋翻譯:對這個iterable的每乙個元素執行給定的動作指導所有元素都被處理或者動作丟擲乙個異常 為止。除非被實現類指定,動作將以迭代的順序執行(如果乙個迭代的順序被指定。)被動作 丟擲的異常將被傳遞給呼叫者

default spliteratorspliterator

() 複製**

該方法提供了乙個可以並行遍歷元素的迭代器,以適應現在cpu多核時代並行遍歷的需求。簡單說:分割,增加並行處理能力對原始碼注釋翻譯:建立乙個被這個iterable介面描述的元素上spliterator。預設實現從iterable的iterator中建立乙個早期繫結的spliterator。這個spliterator 繼承iterable的iterator的fail-fast性質。 預設實現應該總是被重寫。被預設實現返回的spliterator擁有不好分解能力,是不依據指定 大小定製的,而且不報告任何spliterator的性質。實現類差不多總是能提供更好的實現。

iterator被稱之為順序遍歷迭代器,jdk中預設對集合框架中資料結構做了實現。 iterator在實際應用中有乙個比較好的點就是,可以一邊遍歷一遍刪除元素。後面我會通過arraylist中的iterator()方法進行說明。

由原始碼圖iterator介面中定義了四個方法,分別是

在jdk1.8之後iterator中增加的乙個預設方法

//使用方法

listarr=new arraylist<>();

arr.add("hello");

arr.add(("world"));

arr.iterator().foreachremaining(str-> system.out.println(str));

複製**

2.3.1 foreachremaining()與foreach()方法之間的區別?

foreachremaining()原始碼:

default void foreachremaining(consumer<? super e> action) 

複製**

foreach()原始碼:

default void foreach(consumer<? super t> action) 

}複製**

通過原始碼,我們可以看出他們之間的區別與聯絡。相同點:

區別:

list list = new arraylist();

list.add("coder程式設計");

for (iterator iter = list.iterator(); iter.hasnext();)

/*迭代器用於while迴圈

iterator iter = list.iterator();

while(iter.hasnext())

*/複製**

聊一聊小甜餅

cookies程式設計 cookie是儲存在客戶端的小文字,儲存的位置分為兩種 cookie可能儲存在客戶端瀏覽器的所佔記憶體中,關閉瀏覽器後,cookies就不再存在。cookie也可能儲存在客戶pc機的硬碟上,設定有效時間,超過有效時間後失效。cookie的常見應用 簡化登入 很多 在登入時,可...

聊一聊動態規劃

一 問題 看乙個經常被引用的問題 例子1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 例子2 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 問你例子1是多少時,你乙個個算後,結果是20 接著問你例子2時,你會馬上說出21,為什...

聊一聊元資料

這個話題來自我的msn space。這是原文 元資料 metadata 這個詞現在到處氾濫。其實我對元資料充其量只能說有自己的理解而已,並不能確信這個理解是正確的。我認為,資料結構分為三個層次 uml可是四層哦 例項層 直接描述特異化的資料場景 元資料層 描述例項的結構的一組資料 元資料的元資料層 ...