你知道for、foreach和Iterator遍歷有什么(效率)區別嗎

1.在形式上

for的形式是
for(int i=0;i<arr.size();i++){...}

foreach的形式是
for(int i:arr){...}

iterator的形式是

Iterator it = arr.iterator();
while(it.hasNext()){ object o =it.next(); ...}

2.條件上

  • for需要知道集合或數組的大小,而且需要是有序的,不然無法遍歷;
  • foreach和iterator都不需要知道集合或數組的大小,他們都是得到集合內的每個元素然后進行處理;

3.多態差別

for和foreach都需要先知道集合的類型,甚至是集合內元素的類型,即需要訪問內部的成員,不能實現態;
iterator是一個接口類型,他不關心集合或者數組的類型,而且他還能隨時修改和刪除集合的元素,舉個例子:

public void display(Iterator<object> it){
               while(it.hasNext()){
                     system.out.print(it.next()+"");
              }
 }  

當我們需要遍歷不同的集合時,我們只需要傳遞集合的iterator(如arr.iterator())看懂了吧,這就是iterator的好處,他不包含任何有關他所遍歷的序列的類型信息,能夠將遍歷序列的操作與序列底層的結構分離。迭代器統一了對容器的訪問方式。這也是接口的解耦的最好體現。

3.用法差別

  • for循環一般用來處理比較簡單的有序的,可預知大小的集合或數組
  • foreach可用于遍歷任何集合或數組,而且操作簡單易懂,他唯一的不好就是需要了解集合內部類型
  • iterator是最強大的,他可以隨時修改或者刪除集合內部的元素,并且是在不需要知道元素和集合的類 型的情況下進行的(原因可參考第三點:多態差別),當你需要對不同的容器實現同樣的遍歷方式時,迭代器是最好的選擇!

5.效率差別

同樣遍歷一個集合,iterator和foreach用時不相上下。for循環用時最少。

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容