三種迴圈的效能比較

2021-07-11 04:01:07 字數 1739 閱讀 4143

下面是一段測試**:

listintegers = new arraylist();

for (int i = 0; i < 10000000; i++)

long l1 = system.currenttimemillis();

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

long l2 = system.currenttimemillis();

system.out.println(l2 - l1);

iteratoriterator = integers.iterator();

while (iterator.hasnext())

long l3 = system.currenttimemillis();

system.out.println(l3-l2);

for (integer i : integers)

system.out.println(system.currenttimemillis()-l3);

}

很顯然第一種迴圈的效率最高,第二種次之,第三種最差。隱約記得,在剛工作的時候帶我的師傅說最好用 for-each 迴圈,**簡潔,效率還高,我一直以為也是這樣。

今天,我看了 randomaccess 介面的文件說明,文件中明確說明了實現了 randomaccess 介面的類使用經典的 for 迴圈要比使用 iterator 迴圈更快(arraylis 實現了 randomaccess 介面)。動手試了下果然如此,for-each 迴圈的底層也是使用了 iterator ,只是對 iterator 進行了包裝。

下面是另一段**,除了第一行和迴圈的大小不同外其餘的地方都相同。上乙個例子中 list 的實現是 arraylist ,下面的例子中 list 的實現是 linkedlist 。

在這種情況下經典的 for 迴圈要比另外兩種迴圈慢的多。文件中說了,實現了 randomaccess 介面的類使用經典的迴圈要比 iterator 迴圈要快。arraylist 實現了 randomaccess 介面,但 linkedlist 並沒有實現 randomaccess 介面。由於 arraylist 的底層實現是陣列,通過下標常量時間訪問,訪問快, linkedlist 底層實現是鍊錶,訪問時間的平均長度與 linkedlist 的容量成正比,是線性訪問時間,所以慢。

RabbitMQ三種交換模式的效能比較

rabbitmq三種交換模式的效能比較 rabbitmq中,所有生產者提交的訊息都由exchange來接受,然後exchange按照特定的策略 到queue進行儲存。rabbitmq提供了四種exchange fanout,direct,topic,header header模式在實際使用中較少,本...

建立節點三種方式和效能比較

注意如果頁面已經載入完成,再呼叫會導致頁面重繪 lang en charset utf 8 demotitle head document.write script body html lang en charset utf 8 demotitle head document.body.innerh...

三種迴圈的比較

switch case 語法 switch 表示式 變數 case 值1 語句1 break case 值2 語句2 break default 語句3 break 執行過程 當程式執行到switch 表示式 變數 先判斷括號裡的表示式,執行大括號裡的case 後面的值1 如果和值1匹配,就執行語句...