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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

for遍历list scala_面试官问:List 如何一边遍历,一边删除?

發(fā)布時(shí)間:2024/1/23 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 for遍历list scala_面试官问:List 如何一边遍历,一边删除? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

這是最近面試時(shí)被問到的1道面試題,本篇博客對此問題進(jìn)行總結(jié)分享。

1. 新手常犯的錯(cuò)誤

可能很多新手(包括當(dāng)年的我,哈哈)第一時(shí)間想到的寫法是下面這樣的:

public static void main(String[] args) {List<String> platformList = new ArrayList<>();platformList.add("博客園");platformList.add("CSDN");platformList.add("掘金");for (String platform : platformList) {if (platform.equals("博客園")) {platformList.remove(platform);}}System.out.println(platformList); }

然后滿懷信心的去運(yùn)行,結(jié)果竟然拋java.util.ConcurrentModificationException異常了,翻譯成中文就是:并發(fā)修改異常。

是不是很懵,心想這是為什么呢?

讓我們首先看下上面這段代碼生成的字節(jié)碼,如下所示:

由此可以看出,foreach循環(huán)在實(shí)際執(zhí)行時(shí),其實(shí)使用的是Iterator,使用的核心方法是hasnext()和next()。

然后再來看下ArrayList類的Iterator是如何實(shí)現(xiàn)的呢?

可以看出,調(diào)用next()方法獲取下一個(gè)元素時(shí),第一行代碼就是調(diào)用了checkForComodification();,而該方法的核心邏輯就是比較modCount和expectedModCount這2個(gè)變量的值。

在上面的例子中,剛開始modCount和expectedModCount的值都為3,所以第1次獲取元素"博客園"是沒問題的,但是當(dāng)執(zhí)行完下面這行代碼時(shí):

platformList.remove(platform);

modCount的值就被修改成了4。

所以在第2次獲取元素時(shí),modCount和expectedModCount的值就不相等了,所以拋出了java.util.ConcurrentModificationException異常。

既然不能使用foreach來實(shí)現(xiàn),那么我們該如何實(shí)現(xiàn)呢?

主要有以下3種方法:

  • 使用Iterator的remove()方法
  • 使用for循環(huán)正序遍歷
  • 使用for循環(huán)倒序遍歷

接下來一一講解。

2. 使用Iterator的remove()方法

使用Iterator的remove()方法的實(shí)現(xiàn)方式如下所示:

public static void main(String[] args) {List<String> platformList = new ArrayList<>();platformList.add("博客園");platformList.add("CSDN");platformList.add("掘金");Iterator<String> iterator = platformList.iterator();while (iterator.hasNext()) {String platform = iterator.next();if (platform.equals("博客園")) {iterator.remove();}}System.out.println(platformList); }

輸出結(jié)果為:

[CSDN, 掘金]

為什么使用iterator.remove();就可以呢?讓我們看下它的源碼:

可以看出,每次刪除一個(gè)元素,都會(huì)將modCount的值重新賦值給expectedModCount,這樣2個(gè)變量就相等了,不會(huì)觸發(fā)java.util.ConcurrentModificationException異常。更多面試題,歡迎關(guān)注公眾號 Java面試題精選

3. 使用for循環(huán)正序遍歷

使用for循環(huán)正序遍歷的實(shí)現(xiàn)方式如下所示:

public static void main(String[] args) {List<String> platformList = new ArrayList<>();platformList.add("博客園");platformList.add("CSDN");platformList.add("掘金");for (int i = 0; i < platformList.size(); i++) {String item = platformList.get(i);if (item.equals("博客園")) {platformList.remove(i);i = i - 1;}}System.out.println(platformList); }

這種實(shí)現(xiàn)方式比較好理解,就是通過數(shù)組的下標(biāo)來刪除,不過有個(gè)注意事項(xiàng)就是刪除元素后,要修正下下標(biāo)的值:

i = i - 1;

為什么要修正下標(biāo)的值呢?因?yàn)閯傞_始元素的下標(biāo)是這樣的:

第1次循環(huán)將元素"博客園"刪除后,元素的下標(biāo)變成了下面這樣:

第2次循環(huán)時(shí)i的值為1,也就是取到了元素”掘金“,這樣就導(dǎo)致元素"CSDN"被跳過檢查了,所以刪除完元素后,我們要修正下下標(biāo),這也是上面代碼中i = i - 1;的用途。更多面試問題可以關(guān)注微信訂閱號碼匠筆記回復(fù)面試獲取

4. 使用for循環(huán)倒序遍歷

使用for循環(huán)倒序遍歷的實(shí)現(xiàn)方式如下所示:

public static void main(String[] args) {List<String> platformList = new ArrayList<>();platformList.add("博客園");platformList.add("CSDN");platformList.add("掘金");for (int i = platformList.size() - 1; i >= 0; i--) {String item = platformList.get(i);if (item.equals("掘金")) {platformList.remove(i);}}System.out.println(platformList); }

這種實(shí)現(xiàn)方式和使用for循環(huán)正序遍歷類似,不過不用再修正下標(biāo),因?yàn)閯傞_始元素的下標(biāo)是這樣的:

第1次循環(huán)將元素"掘金"刪除后,元素的下標(biāo)變成了下面這樣:

第2次循環(huán)時(shí)i的值為1,也就是取到了元素”CSDN“,不會(huì)導(dǎo)致跳過元素,所以不需要修正下標(biāo)。

5. 參考

https://blog.csdn.net/zjwcdd/article/details/51513879https://blog.csdn.net/wangjun5159/article/details/61415358

來源:掘金

作者:申城異鄉(xiāng)人

原文:juejin.im/post/5e74413cf265da574c569935

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的for遍历list scala_面试官问:List 如何一边遍历,一边删除?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 娇妻高潮浓精白浆xxⅹ | 欧美做受xxxxxⅹ性视频 | 182tv午夜 | 日韩成人精品一区二区 | 天天爽天天爽天天爽 | 亚洲性影院 | 国产精品久久久精品 | 人妻少妇偷人精品无码 | 国产精品一区二区三区在线看 | 精品人妻一区二区三区日产乱码卜 | 黄色a一级视频 | 国产一区二区三区视频免费在线观看 | 国产男女猛烈无遮挡免费视频动漫 | 亚洲欧美91 | 中国特级黄色大片 | 免费黄色一级视频 | 夜夜夜夜夜操 | 伊人中文字幕在线观看 | 一级黄色大片免费观看 | 日韩视频在线免费观看 | 高清乱码免费看污 | 国产美女视频网站 | 久久久久久久国产精品美女 | 十八禁视频网站在线观看 | 五月婷婷丁香综合 | 免费av看 | 超碰97人人射妻 | 色综合自拍| 亚洲欧美系列 | 日本一级大毛片a一 | 国产精品刺激 | 日韩精品视频在线观看免费 | 日韩高清一级 | 久久av无码精品人妻系列试探 | 亚洲综人| 成人在线天堂 | 男人操女人下面 | 午夜久久一区 | 欧日韩一区二区三区 | 日韩三级在线免费观看 | 国产乱码精品一区二三区蜜臂 | 玩弄少妇人妻 | 六月丁香激情 | 久久国产精品免费视频 | 六月丁香婷婷综合 | 欧美性啪啪 | 中文字幕亚洲欧美日韩在线不卡 | 森泽佳奈作品在线观看 | 在线精品福利 | 日日碰狠狠添天天爽无码 | 一本色道久久hezyo加勒比 | 一区二区三区日韩在线 | 中国黄色录像 | 国产在线午夜 | 都市激情综合 | 在线观看精品国产 | 女人性做爰69片免费看 | 99热国产精品 | 国产麻豆午夜三级精品 | 韩国主播青草55部完整 | 免费成年人视频 | 亚洲第一精品在线 | 6699嫩草久久久精品影院 | 日本白嫩的bbw| 91亚洲成人 | 在线免费视频一区二区 | 欧美伦理一区二区三区 | 三级自拍视频 | 粉嫩久久99精品久久久久久夜 | 午夜在线国产 | 后进极品美女圆润翘臀 | 亚洲片国产一区一级在线观看 | www日本高清视频 | 国产精品永久久久久久久久久 | 欧美永久 | 美女扒开内裤让男人桶 | 国产性―交―乱―色―情人 | av成人免费在线 | 成人调教视频 | 精品少妇无码av无码专区 | 大陆明星乱淫(高h)小说 | 国产97色在线 | 日韩 | 欧美精品在欧美一区二区 | 小日子的在线观看免费第8集 | 日韩伦理一区二区三区 | 妺妺窝人体色777777 | 超碰97在线资源站 | 国产亚洲欧美精品久久久久久 | 正在播放欧美 | 无码专区久久综合久中文字幕 | 一区二区三区四区免费视频 | 日韩免费在线视频 | 国产91精品一区二区麻豆亚洲 | 天堂中文在线播放 | 色网在线看| 国产13页| 久久在线播放 | 色爱av| 国产日韩精品中文字无码 |