欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

增強for循環是什么

方一強2年前17瀏覽0評論

增強for循環是什么?

增強for循環亦為高級for循環。

增強for循環內部是使用的iterator來遍歷的,只能遍歷數組和實現了Iterable接口的集合。優點是寫法簡便,無需獲得數組、集合長度,也無需根據索引來訪問元素。缺點是不能在循環里動態的刪除元素和獲取元素下標。

任何的增強for循環都可以改寫為普通for循環。遍歷集合所有元素的話用增強for循環更加簡潔,如果是復雜的循環,還是用for循環比較好,for循環功支持索引取元素,可以使用下標來控制位置。

高級for有一個局限性,必須有被遍歷的目標。建議在遍歷數組的時候,還是希望使用傳統for,因為傳統for可以定義角標。凡是支持迭代器的都支持高級for

.而對于 LinkedList 由于獲取一個元素,要從頭開始向后找,因此建議使用 增強for循環,也就是iterator。

下面用一個例子說明這點:

代碼一

public static void removeEvensVer2(List<Integer> lst)

{

for (Integer x : lst)

if (x % 2 == 0)

lst.remove(x);

System.out.println(lst);

}

public static void removeEvensVer2(List<Integer> lst) { for (Integer x : lst) if (x % 2 == 0) lst.remove(x); System.out.println(lst); }

代碼二

public static void removeEvensVer3(List<Integer> lst)

{

Iterator<Integer> itr = lst.iterator();

while (itr.hasNext())

if (itr.next() % 2 == 0)

itr.remove();

System.out.println(lst);

}

public static void removeEvensVer3(List<Integer> lst) { Iterator<Integer> itr = lst.iterator(); while (itr.hasNext()) if (itr.next() % 2 == 0) itr.remove(); System.out.println(lst); }代碼一在運行時拋出異常,代碼二正常

原因分析:因為增強的for循環內部就是調用iterator實現的,在遍歷的時候就將list轉化為了迭代器,當迭代器被創建之后,如果從結構上對列表修改除非通過迭代器自身的remove、add方法,其他任何時間任何方式的修改,迭代器都會拋出ConcurrentModificationException異常。

java迭代器 下標,增強for循環是什么