解決JAVA遍歷List集合,刪除數(shù)據(jù)時出現(xiàn)的問題
一、問題描述
有時候,我們會遇到在遍歷List集合的過程中刪除數(shù)據(jù)的情況。
看著自己寫的代碼,感覺完全沒有問題,但就是達不到預(yù)期的效果,這是為什么呢?下面我們來分析下
String str1 = new String("1");
String str2 = new String("2");
String str3 = new String("3");
String str4 = new String("4");
String str5 = new String("5");
List list = new ArrayList();
list.add(str1);
list.add(str2);
list.add(str3);
list.add(str4);
list.add(str5);
System.out.println("list.size()=" + list.size());
for (int i = 0; i < list.size(); i++) {
list.remove(i);
// i--;
//System.out.println(i+" "+list.get(i)+" ");
}
System.out.println("after remove:list.size()=" + list.size());
本來預(yù)期結(jié)果應(yīng)該是:
list.size()=5
after remove:list.size()=0
但實際上結(jié)果卻是:
list.size()=5
after remove:list.size()=2
原因如下: List每remove掉一個元素以后,后面的元素都會向前移動 ,此時如果執(zhí)行i++,則剛剛移過來的元素沒有被讀取。
分析:
- List中有5條數(shù)據(jù),需要循環(huán)5次,
- 第一次數(shù)據(jù)為:1 2 3 4 5
- 執(zhí)行完remove(0) 后,數(shù)據(jù)為 2 3 4 5 , i=1
- 第二次數(shù)據(jù)為:2 3 4 5
- 執(zhí)行完remove(1) 后,數(shù)據(jù)為 2 4 5 , i=2
- 第三次數(shù)據(jù)為:2 4 5
- 執(zhí)行完remove(2) 后,數(shù)據(jù)為 2 4 , i=3
- 此時如果加上上面注釋的代碼 System.out.println(i+" "+list.get(i)+" "); 循環(huán)第4、5次時就會出現(xiàn)異常
二、解決方法
解決方法1:每移過一次后,再把 i 移回來
for (int i = 0; i < list.size(); i++) {
list.remove(i);
i--;
}
解決方法2:先刪除后面的元素
for (int i = list.size()-1; i >= 0; i--) { list.remove(i); }
解決方法3:使用iterator刪除
for(Iterator it = list.iterator();it.hasNext();){
it.remove();
}
以上就是解決JAVA遍歷List集合時,刪除數(shù)據(jù)出現(xiàn)的問題的詳細內(nèi)容,更多關(guān)于JAVA遍歷List集合 刪除數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Mybatis使用foreach批量更新數(shù)據(jù)報無效字符錯誤問題
這篇文章主要介紹了Mybatis使用foreach批量更新數(shù)據(jù)報無效字符錯誤問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
SpringQuartz定時任務(wù)核心組件JobDetail與Trigger配置
Spring框架與Quartz調(diào)度器的集成提供了強大而靈活的定時任務(wù)解決方案,本文主要介紹了SpringQuartz定時任務(wù)核心組件JobDetail與Trigger配置,具有一定的參考價值,感興趣的可以了解一下2025-04-04
Java中StringRedisTemplate和RedisTemplate的區(qū)別及使用方法
本文主要介紹了Java中StringRedisTemplate和RedisTemplate的區(qū)別及使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04
Windows系統(tǒng)編寫bat腳本啟動、停止及重啟Java服務(wù)jar包
在bat文件中我們將編寫一些代碼來運行Java jar文件,下面這篇文章主要給大家介紹了關(guān)于Windows系統(tǒng)編寫bat腳本啟動、停止及重啟Java服務(wù)jar包的相關(guān)資料,需要的朋友可以參考下2023-12-12
springboot用controller跳轉(zhuǎn)html頁面的實現(xiàn)
這篇文章主要介紹了springboot用controller跳轉(zhuǎn)html頁面的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09

