Java中for循環(huán)遍歷刪除操作方法
在Java中,有些場(chǎng)景需要遍歷集合中的元素,然后根據(jù)條件進(jìn)行刪除元素的操作。如果使用傳統(tǒng)的for循環(huán)遍歷方式來(lái)刪除元素,很可能出錯(cuò)或發(fā)生意想不到的問(wèn)題。推薦使用迭代器iterator完成
1. 推薦使用迭代器方式****刪除
阿里規(guī)約:【強(qiáng)制】不要在 foreach 循環(huán)里進(jìn)行元素的 remove/add 操作。remove 元素請(qǐng)使用 Iterator方式,如果并發(fā)操作,需要對(duì) Iterator 對(duì)象加鎖。
@Test void testList2(){ List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String item = iterator.next(); if ("2".equals(item)) { iterator.remove(); } } System.out.println(list); }
2. 盡量不要使用for循環(huán)遍歷刪除,否則很可能出問(wèn)題。
因?yàn)閯h除元素后,數(shù)組元素發(fā)生前移,后續(xù)遍歷可能導(dǎo)致
數(shù)組訪問(wèn)越界錯(cuò)誤:元素減少,但是size()沒(méi)有變,(可改成for里使用list.size())
有元素沒(méi)遍歷到
@Test void testList(){ List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); for (String item : list) { if ("2".equals(item)) { list.remove(item); } } System.out.println(list); } //或 @Test void testList2(){ List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); int size = list.size(); for (int i=0; i<size; i++) { if ("2".equals(list.gei(i))) { list.remove(i); } } System.out.println(list); }
3. 如果非要使用這種的話,可以使用倒序遍歷刪除,這樣即使發(fā)生元素移動(dòng),不影響前面的元素
@Test void testList3(){ List<String> list = new ArrayList<String>(); list.add("1"); list.add("2"); for (int i=list.size()-1; i>=0; i--) { if ("2".equals(list.gei(i))) { list.remove(i); } } System.out.println(list); }
到此這篇關(guān)于Java中for循環(huán)遍歷刪除操作的文章就介紹到這了,更多相關(guān)java for循環(huán)刪除內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用Jackson來(lái)實(shí)現(xiàn)Java對(duì)象與JSON的相互轉(zhuǎn)換的教程
這篇文章主要介紹了使用Jackson來(lái)實(shí)現(xiàn)Java對(duì)象與JSON的互相轉(zhuǎn)換的教程,文中羅列了3中Jackson的使用方式,需要的朋友可以參考下2016-01-01SpringBoot實(shí)現(xiàn)分布式驗(yàn)證碼登錄方案小結(jié)
驗(yàn)證碼登錄作為一種有效的防護(hù)手段,可以防止惡意gongji、暴力pojie等,本文主要介紹了SpringBoot實(shí)現(xiàn)分布式驗(yàn)證碼登錄方案小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2024-12-12SpringBoot CountDownLatch多任務(wù)并行處理的實(shí)現(xiàn)方法
本篇文章主要介紹了SpringBoot CountDownLatch多任務(wù)并行處理的實(shí)現(xiàn)方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-04-04詳解servlet的url-pattern匹配規(guī)則
本篇文章主要介紹了=servlet的url-pattern匹配規(guī)則,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12如何使用IDEA查看java文件編譯后的字節(jié)碼內(nèi)容
這篇文章主要介紹了如何使用IDEA查看java文件編譯后的字節(jié)碼內(nèi)容,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03Mybatis批量更新數(shù)據(jù)庫(kù)錯(cuò)誤問(wèn)題
這篇文章主要介紹了Mybatis批量更新數(shù)據(jù)庫(kù)錯(cuò)誤問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08Java使用Curator進(jìn)行ZooKeeper操作的詳細(xì)教程
Apache Curator 是一個(gè)基于 ZooKeeper 的 Java 客戶端庫(kù),它極大地簡(jiǎn)化了使用 ZooKeeper 的開發(fā)工作,在分布式系統(tǒng)中,ZooKeeper 通常被用來(lái)作為協(xié)調(diào)服務(wù),而 Curator 則為我們提供了更簡(jiǎn)潔易用的接口,本文將介紹 Curator 的核心功能及實(shí)踐樣例,需要的朋友可以參考下2025-04-04Java消息隊(duì)列JMS實(shí)現(xiàn)原理解析
這篇文章主要介紹了Java消息隊(duì)列JMS實(shí)現(xiàn)原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03java 進(jìn)程是如何在Linux服務(wù)器上進(jìn)行內(nèi)存分配的
這篇文章主要介紹了java 進(jìn)程是如何在Linux服務(wù)器上進(jìn)行內(nèi)存分配的,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下2020-11-11