for (Iterator<String> i = list.iterator();i.hasNext();) { doSomething(i.next()); } for (int i = 0; i < list.size(); i++) { doSomething(list.get(i)); }
for (String str : list) { doSomething(str); }
比傳統的for循環:html
關於有效預防bug以及簡潔性,請看如下代碼:數組
// 不簡潔,同時易誤致使bug for (Iterator<String> i = list.iterator();i.hasNext();) { for (Iterator<String> j = list2.iterator();j.hasNext();) { doSomething(i.next(),j.next()); } } // 簡潔 for (String s : list) { for (String s1 : list2) { doSomething(s,s1); } }
(1)過濾
若是須要遍歷集合,並刪除選定的元素,就須要使用顯示的迭代器,以即可以調用它的remove方法。性能
// 正確作法 for (Iterator<String> i = list.iterator();i.hasNext();) { i.next(); // 指向要刪除的元素 i.remove(); } // 錯誤作法 for (int i = 0; i < list.size(); i++) { list.remove(i); } // 錯誤作法 for (String s : list) { list.remove(s); }
關於刪除集合元素參考:Java循環刪除集合多個元素的正確打開方式code
(2)轉換
若是須要遍歷全部元素,而後從新設定某些值,那麼就須要李彪迭代器或者數組索引,以便設定元素的值。htm
(3)平行迭代
就是並行地同時遍歷多個集合,須要顯示地控制迭代器或者索引變量,以便全部迭代器或者索引變量均可以獲得同步前移。blog