今天開始我們來聊一聊集合的那些事。
說到集合,
最最最常用的方法估計就是遍歷了。
那我們就從遍歷來開始深入集合。
準(zhǔn)備數(shù)據(jù)
先新建一個ArrayList,本文中就直接采用了直接add字符串的方式,實(shí)際開發(fā)中,實(shí)體類會復(fù)雜的多。
List<String> list =newArrayList<>();
list.add("a");
list.add("b");
list.add("c");
開始遍歷
fori方式遍歷
代碼如下:
for(inti =0; i < list.size(); i++) {
System.out.println(list.get(i));
}
使用javap可以看到for翻譯成了goto , 其他size,get等方法照舊:javap -v -p類名
for(T t:list)方式遍歷
代碼如下:
for(Strings : list) {
System.out.println(s);
}
使用javap可以看到
for(T t :list)實(shí)際上調(diào)用的是list的iterator,通過hasNext和next來實(shí)現(xiàn)遍歷的。
foreach方式遍歷
代碼如下:
list.forEach(x-> System.out.println(x));
只有一行代碼就可以了,但實(shí)際上,這是一個語法糖,我們點(diǎn)進(jìn)去forEach可以看到:
再根據(jù)我們上面的分析,等同于調(diào)用iterator進(jìn)行遍歷。
總結(jié)
在java世界中,為了方便開發(fā),jdk給我們提供了很多便利的方法。但追根到底,會有種百川入海的感覺,最終調(diào)用的還是那幾個基礎(chǔ)方法。如上文所述,foreach 實(shí)際上調(diào)用是的 for(T t :list)。 for(T t :list)實(shí)際上調(diào)用的是iterator的next。如果我們再跟蹤下去會發(fā)現(xiàn),arraylist 實(shí)際上就是一個Object[] elementData我們調(diào)用iterator.next 實(shí)際上就是用的elementData[i]:
關(guān)注小編還會繼續(xù)分享相關(guān)文章,需要java、python學(xué)習(xí)視頻資料及路線的可以加微信:15513541542(記得備注888,我就知道是你了)