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