亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么在foreach中remove最后一個元素會報錯?

為什么在foreach中remove最后一個元素會報錯?

眼眸繁星 2019-03-01 11:06:16
public static void main(String[] args) { List<String> a = new ArrayList<String>(); a.add("1"); a.add("2"); a.add("23"); for (String temp : a) { if ("23".equals(temp)) { a.remove(temp); } } System.out.println(a); } Exception in thread "main" java.util.ConcurrentModificationExceptionat java.util.ArrayList$Itr.checkForComodification(ArrayList.java:901)at java.util.ArrayList$Itr.next(ArrayList.java:851)at wan.ForEach.main(ForEach.java:22)
查看完整描述

5 回答

?
慕的地8271018

TA貢獻1796條經驗 獲得超4個贊

樓上說的很官方了,說的直白一點就是for(Object obj:list)這種方式,是不能調用list的remove方法進行刪除元素的操作的,否則會拋出異常,因為Iterator需要確定的結構,所以想刪除有兩種方法,一種是復制一個列表,通過循環新列表來remove老列表中的元素,還有一種是使用for(int i; i<count; i++)這種形式進行循環,這樣是可以通過游標進行刪除的,自己注意下數組下標不要越界就行了。

查看完整回答
反對 回復 2019-03-01
?
智慧大石

TA貢獻1946條經驗 獲得超3個贊

foreach是通過迭代器來實現的,使用迭代器遍歷元素時,容器不能試圖改變容器的結構,如remove、add操作會拋出異常; 可以使用迭代器的remove方法刪除元素。

查看完整回答
反對 回復 2019-03-01
?
RISEBY

TA貢獻1856條經驗 獲得超5個贊

樓上說得很明確了,這里我說出兩種簡單的解決方式
1.迭代器刪除
2.復制list來遍歷,然后操作原始的list.
當然推薦迭代器刪除

查看完整回答
反對 回復 2019-03-01
?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

你在數雞蛋的時候別人偷偷往你籃子了放雞蛋或者拿走雞蛋都會導致你數的不對 除非你自己去拿走或者拿進雞蛋,你自己才能記住 同樣的道理在程序中也是這樣的

查看完整回答
反對 回復 2019-03-01
  • 5 回答
  • 0 關注
  • 983 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號