list循環背後的故事

list循環背後的故事

今天開始我們來聊一聊集合的那些事。說到集合,最最最常用的方法估計就是遍歷了。那我們就從遍歷來開始深入集合。

準備數據

先新建一個ArrayList,本文中就直接採用了直接add字符串的方式,實際開發中,實體類會複雜的多。

        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");

開始遍歷

fori方式遍歷

代碼如下:

        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }

使用javap可以看到for翻譯成了goto , 其他size,get等方法照舊:
javap -v -p 類名

1

for(T t:list)方式遍歷

代碼如下:

        for (String s : list) {
            System.out.println(s);
        }

使用javap可以看到
2
for(T t :list) 實際上調用的是list的 iterator,通過hasNext 和next 來實現遍歷的。也就是和下面代碼的效果是一樣的:
3

foreach 方式遍歷

代碼如下:

list.forEach(x-> System.out.println(x));

只有一行代碼就可以了,但實際上,這是一個語法糖,我們點進去forEach可以看到:
4
再根據我們上面的分析,等同於調用iterator進行遍歷。

總結

在java世界中,爲了方便開發,jdk給我們提供了很多便利的方法。但追根到底,會有種百川入海的感覺,最終調用的還是那幾個基礎方法。如上文所述,foreach 實際上調用是的 for(T t :list)。 for(T t :list)實際上調用的是iterator的next。如果我們再跟蹤下去會發現,arraylist 實際上就是一個Object[] elementData 我們調用iterator.next 實際上就是用的elementData[i]:
5

歡迎大家關注公衆號:java技術大本營, 質量內容號,專心寫好每一篇技術文。歡迎留言一起討論
2737332-1b5b5cdf92b059b5.jpg

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章