很多時候我們很自然的認為,for循環的時候使用foreach和原來的for循環用下標的方式遍歷是相同的。
而且因為foreach循環寫法簡單,很容易理解,而且少去了很多麻煩的變量,所以估計在學會使用foreach循環之后,很多人就沒有用過下標的循環了。
但是你知道兩者其實還是有很大區別的,在不同的情況下面應該使用不同的方式去循環。
否則會導致循環的時間變長。數據量小的時候當然沒有什么關系,但是一旦數據量大了之后問題就會暴露出來了。
首先我們要知道的時候foreach循環是利用迭代器的使用循環。那么什么是迭代器呢?
提供一種方法訪問一個容器對象的各個元素,同時又無需暴露該對象的內部細節,這是設計模式中的一種解釋。
for(int i:list)
for(Iterator<Integer> i=list.iterator();i.hasNext();)
上面兩種寫法意思其實是一樣的
其實就是利用了hasNext方法實現了foreach循環
知道了什么是foreach循環,那么什么時候去使用,也就好解釋了。
然后需要知道的是什么是RandomAccess接口,ArrayList數組實現了這個接口,這個接口是隨機存取接口。
實現了這個接口就表示內部的存放是隨機的,但是foreach循環需要需要使用next方法獲取下一個元素,而隨機存放的話就需要強制建立前后的聯系。
所以在循環ArrayList的時候使用下標去循環會比foreach循環要快。
下面說List<>,對於這個鏈表類似的有很多數據結構,LinkedList什么的,很多,他們存放本身就是有聯系的,所以對於他們來說,next方法很容易就找到下一個元素的了,所以循環的時候使用foreach很快。
具體的代碼就不貼了,有興趣的人可以試試大數據量的時候,時間上的差距其實是很明顯的。
總結一下,如果一個容器是隨機存放的話,使用帶有下標的循環,如果不是可以使用foreach循環。
不要偷懶哦。