為什么輸出100,這里呼叫了集合中的remove,集合結構發生改變了,為什么運行不報錯,我除錯發現第一次回圈后就不進去第二次回圈了,集合里面不是還有一個1000嗎?如果集合里面有三個元素就會報錯,兩個就不會

uj5u.com熱心網友回復:
不管什么語言,在物件迭代器里(如foreach)直接洗掉指定位置的物件都是會報錯的,原理很簡單,就是不管是物件迭代器還是以索引迭代的迭代器,順時針洗掉都會報錯,因為加入你for(i=0;i<2),此時你迭代第一個時,洗掉第二個,此時迭代器hasNext不光檢測是否迭代完,還會記錄迭代了幾次,你洗掉了第二個,回圈了一次,此時陣列長度為1,回圈了一次1=1,hasNext不成立,當有第三個資料存在時,記錄回圈次數為,第一次回圈結束時,記錄的索引為1,迭代次數為1,此時刪了第二個,陣列長度為2, 1不等于2,hasNext成立,當回圈第二次的時候,it.Next()會直接報錯,因為此時資料已經沒有剩余長度了uj5u.com熱心網友回復:
一般安全洗掉物件,要走倒序洗掉,避免索引溢位轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/256113.html
標籤:新技術前沿
上一篇:安裝msfconsole出錯
下一篇:求大神解答
