當前位置:吉日网官网 - 傳統美德 - 增強for循環和傳統for循環有什麽區別

增強for循環和傳統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異常。

  • 上一篇:四是中國古籍的分類名稱,分別指哪四類?
  • 下一篇:“古墓迷城”古墓文化系列神秘道具

    指尖集點,壹鍵觸金。作為4月9日遊戲中首款探墓文化手遊《盜墓之城》,破解眾多機關劇情是其壹大特色。在《古墓麗影》的古墓世界中,玩家將扮演摸金隊長的角色,破解每壹關的機關設置。這樣會考驗玩家的心智,但除了用腦,還有快速通道幫助玩家順利通關。這個快速通道是什麽?那是神秘道具。

    觸摸金色符號

    摸金符是古代倒鬥鬥士在探索古墓時使用的辟邪之物,也

  • copyright 2024吉日网官网