java foreach與for遍歷效率對比

2021-07-22 13:58:09 字數 1030 閱讀 7057

先看陣列型別的迭代器,拿arraylist來說吧。

arraylistlist = new arraylist<>();

//一般迭代器的寫法

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

//for-each隱藏迭代器的寫法,避免混亂和出錯的可能,也更簡潔。

for (integer integer : list)

//for寫法

for(int i = 0; i < list.size(); i++)

遍歷寫法基本如上,現在我們從原始碼的角度來看一下,arraylist.class檔案。

public e get(int index)
get方法是陣列下標方式確定。

@suppresswarnings("unchecked")

public e next()

可以看出,呼叫iterator.next( )方法其實也是獲取arraylist的陣列變數elementdata,然後下面就根據下標來確定具體的值了,所以其實原理兩者是一樣的。

至於隱藏迭代器的寫法原理是如何大家可以看一下這篇文章,這裡就不詳述了:

那麼當迭代器不是陣列型別的時候,又是如何呢,來看linkedlist.class這個類。

並沒有想要的東西,我們再進去看一下node(index).item

不知道讀者注意到了沒有(沒有還不是眼瞎,這麼大的箭頭),對於鍊錶的get方法,是通過遍歷鍊錶的方法,如果說我們需要輸出第999和第1000的數時候,

先從0到999,然後再從0-1000,時間浪費就不是一點點了。回過頭了看一下迭代器的方式。

如果我們需要輸出1-1000各個位置的數,那麼由於鍊錶是會保留下乙個節點的指標,那麼假設現在找到第999個數,找第1000個數,只需要再執行一次

next.next.item就行了,所以效率更高。

如果有錯希望指出。

使用 Java foreach 遇到的問題

本來以為使用foreach就和使用for迴圈是一樣的效果,結果,卻遇到了意料之外的事情。先來看乙個例子 public void testarray system.out.println 輸出剛剛定義的陣列 for int x arr 通過索引給陣列元素賦值 system.out.println 通過...

java for each的使用場景和使用方法

使用for each的可以是乙個陣列,或者是實現iterable這個介面的物件 collection繼承了這個介面,所有集合類都可以使用for each 既然for迴圈能遍歷乙個陣列或者集合,那麼為什麼還會有乙個for each做遍歷呢?下面 參考了jdk1.8api 舉例說明 for迴圈遍歷每乙個...

SQL與NoSQL MySQL與NoSQL的融合

寫這一篇內容的原因是mysql5.6.2突然推出了memcached的功能。nosql to innodb with memcached的出現,可以看出nosql對關聯式資料庫的確產生了巨大的影響,個人覺得這是乙個非常大的進步,可以讓開發人員更加方便的使用nosql和關聯式資料庫。nosql一般被認...