增強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日遊戲中首款探墓文化手遊《盜墓之城》,破解眾多機關劇情是其壹大特色。在《古墓麗影》的古墓世界中,玩家將扮演摸金隊長的角色,破解每壹關的機關設置。這樣會考驗玩家的心智,但除了用腦,還有快速通道幫助玩家順利通關。這個快速通道是什麽?那是神秘道具。
觸摸金色符號
摸金符是古代倒鬥鬥士在探索古墓時使用的辟邪之物,也