1.foreach循環遍歷
格式:for(元素的數據類型 變量名:數組或集合){
}
2.使用迭代器遍歷
方法名稱:Iterator<E> iterator()
說明:返回集合中的迭代器對象,該迭代器對象默認指向當前集合的第一個元素。
示例:
List<String> list = new ArrayList<>();list.add("王");list.add("小");list.add("王");list.add("小");Iterator iterator = list.iterator();while (iterator.hasNext()){System.out.print(iterator.next());}
迭代器初始在集合的第一個元素,while循環判斷條件為當前元素是否為空,打印時的.next()是將索引遍歷到下一個元素。
3.Lambda表達式
方法名稱:default void forEach(Consumer<? super T> action)??
說明:結合lambda遍歷集合
Set<String> set = new HashSet<>();set.add("王");set.add("小");set.add("王");set.add("小");//用Lambda表達式遍歷setset.forEach (new Consumer<String>() {@Overridepublic void accept(String s) {System.out.println(s);}});
4.認識并發修改異常問題
遍歷集合的同時又存在增刪集合元素的行為時可能出現業務異常,這種現象稱為并發修改異常問題。
圖中通過for循環刪除包含枸杞的元素,但是沒有刪除干凈,就是發生了并發修改異常問題
原因是,當for循環中的索引i在第一個元素時,該元素不包含枸杞,i++,索引遍歷至第二個元素,第二個元素包含枸杞,刪除,i++,索引遍歷至第三個元素,但此時紅枸杞元素會因黑枸杞的刪除而前移,至第二個元素,所以紅枸杞未判斷,沒有刪除。
解決并發修改異常問題的方案
① 如果集合支持索引,可以使用for循環遍歷,每刪除數據后做i--;或者可以倒著遍歷
②)可以使用迭代器遍歷,并用迭代器提供的刪除方法刪除數據。
注意:增強for循環/Lambda遍歷均不能解決并發修改異常問題,因此增它們只適合做數據的遍歷,不適合同時做增刪操作,