1. 程式人生 > >從連結串列的迭代遍歷看java lambda表示式效率

從連結串列的迭代遍歷看java lambda表示式效率

隨著JDK1.8的釋出,lambda和函數語言程式設計終於進入到java世界。在用了一段時間,甚至可以說是在硬往lambda和流API上靠。有一天,在跟著大牛學習java時,一句“lambda拖慢程式”突然讓我意識到了什麼,於是我做了個測試。現在,靜下心來,回顧一下那個測試。

一個很簡單的測試,就是一個List的遍歷,我們看看這段程式碼:

import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;

public class ListForEach {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0;  i < 1000; i++) {
            list.add(i);
        }

        long start = System.nanoTime();
        Iterator<Integer> iter = list.iterator();
        while (iter.hasNext()) {
            Integer i = iter.next();
        }
        long finish = System.nanoTime();
        System.out.println(finish - start + "ns");

        long begin = System.nanoTime();
        for (Integer n : list) {
            Integer i = n;
        }
        long end = System.nanoTime();
        System.out.println(end - begin + "ns");

        long head = System.nanoTime();
        list.forEach( t -> {Integer i = t;});
        long tail = System.nanoTime();
        System.out.println(tail - head + "ns");
    }
}

這是執行結果:

直觀點,換一個柱狀圖:

可以看見Lambda的遍歷時間和迭代器以及for-each相差巨大。

因此,使用傳統的方式遍歷,比lambda效率確實要高上很多。