日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

增强for循环之删除

發布時間:2025/3/19 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 增强for循环之删除 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

疑問:為什么刪除倒數第二個不報錯

通過反編譯文件發現增強for循環底層實現是迭代器

源碼追蹤

cursor:迭代器游標,初始值為0,每迭代一次就會+1;
lastRet:最后一個元素的索引值,若不存在返回-1;
expectedModCount:預期修改次數,在初始化時就已經被賦為modCount

① 調用hasNext(),判斷是否還有下一個元素,通過判斷游標和list長度來判斷,如果不一致,則代表還有下一個元素。
② 調用next(),此時會走checkForComodification(),去校驗實際修改次數和預期修改次數是否一致,如果不一致,則拋出異常,觸發fail-fast機制;(fail-fast 機制是java集合中的一種錯誤機制,快速失敗)

cursor->0 cursor->1
next->a next->b remove->modCount->5,size->3
cursor->2
next->checkForComodification,modCount(5) != exceptedModCount(4),fail-fast

cursor->0 cursor->1 cursor->2
next->a next->b next->c remove->modeCount->5,size->3
cursor->3
next->hasNext(),cursor(3) == size(3) break;

總結:
hasNext()判斷cursor和size是否一致,一致就break,刪除到倒數第二個的時候剛好一致,所以不會接著走next(),next()會判斷modCount和expectedModCount是否一致,不一致就fail-fast,所以如果不是刪除倒數第二個出現特殊的cursor=size的話,刪除其他就會fail-fast

如何解決fail-fast:調用迭代器內部的remove,而不是AarrayList的remove;

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的增强for循环之删除的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。