Java中for循環(huán)遍歷刪除操作方法
在Java中,有些場景需要遍歷集合中的元素,然后根據(jù)條件進(jìn)行刪除元素的操作。如果使用傳統(tǒng)的for循環(huán)遍歷方式來刪除元素,很可能出錯或發(fā)生意想不到的問題。推薦使用迭代器iterator完成
1. 推薦使用迭代器方式****刪除
阿里規(guī)約:【強制】不要在 foreach 循環(huán)里進(jìn)行元素的 remove/add 操作。remove 元素請使用 Iterator方式,如果并發(fā)操作,需要對 Iterator 對象加鎖。
@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)遍歷刪除,否則很可能出問題。
因為刪除元素后,數(shù)組元素發(fā)生前移,后續(xù)遍歷可能導(dǎo)致
數(shù)組訪問越界錯誤:元素減少,但是size()沒有變,(可改成for里使用list.size())
有元素沒遍歷到
@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ā)生元素移動,不影響前面的元素
@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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java實戰(zhàn)之用springboot+netty實現(xiàn)簡單的一對一聊天
這篇文章主要介紹了Java實戰(zhàn)之用springboot+netty實現(xiàn)簡單的一對一聊天,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)Java的小伙伴們有非常好的幫助,需要的朋友可以參考下2021-04-04
Java參數(shù)校驗Validator與@AssertTrue深度解析
本文詳細(xì)介紹了Java的Validator框架及其@AssertTrue注解的使用,包括環(huán)境準(zhǔn)備、基礎(chǔ)注解介紹、實戰(zhàn)示例、@AssertTrue的深入解析、高級特性和最佳實踐建議,感興趣的朋友跟隨小編一起看看吧2025-01-01
MyBatis的@SelectProvider注解構(gòu)建動態(tài)SQL方式
這篇文章主要介紹了MyBatis的@SelectProvider注解構(gòu)建動態(tài)SQL方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Java Spring數(shù)據(jù)單元配置過程解析
這篇文章主要介紹了Java Spring數(shù)據(jù)單元配置過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12
maven使用systemPath方式加載本地jar的實現(xiàn)
本文介紹Maven通過systemPath加載本地第三方JAR的方法,需配置依賴和插件以確保打包和運行,具有一定的參考價值,感興趣的可以了解一下2025-06-06

