解決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)文章
配置了jdk的環(huán)境idea卻提示找不到j(luò)dk解決辦法
在使用Java編程語言進行開發(fā)時,IDEA是一個非常流行和強大的集成開發(fā)環(huán)境,這篇文章主要給大家介紹了關(guān)于配置了jdk的環(huán)境idea卻提示找不到j(luò)dk的解決辦法,需要的朋友可以參考下2023-12-12Java連接mysql數(shù)據(jù)庫以及mysql驅(qū)動jar包下載和使用方法
這篇文章主要給大家介紹了關(guān)于Java連接mysql數(shù)據(jù)庫以及mysql驅(qū)動jar包下載和使用方法,MySQL是一款常用的關(guān)系型數(shù)據(jù)庫,它的JDBC驅(qū)動程序使得我們可以通過Java程序連接MySQL數(shù)據(jù)庫進行數(shù)據(jù)操作,需要的朋友可以參考下2023-11-11淺析JAVA中的內(nèi)存結(jié)構(gòu)、重載、this與繼承
這篇文章主要介紹了 JAVA中的內(nèi)存結(jié)構(gòu)、重載、this與繼承的相關(guān)資料,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03Java消息摘要算法MAC實現(xiàn)與應(yīng)用完整示例
這篇文章主要介紹了Java消息摘要算法MAC實現(xiàn)與應(yīng)用,結(jié)合完整實例形式分析了java消息摘要算法MAC的概念、原理、實現(xiàn)方法及相關(guān)操作注意事項,需要的朋友可以參考下2019-09-09Java Spring MVC 上傳下載文件配置及controller方法詳解
這篇文章主要介紹了Java Spring MVC 上傳下載文件配置及controller方法詳解,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下2016-09-09一文詳解Java中的可變對象(Mutable)與不可變對象(Immutable)
如何在 Java 中創(chuàng)建不可變對象?我以前以為所有對象都是不可變的,因為如果你改變一個 String 實例的內(nèi)容,它總是會創(chuàng)建一個新的 String 對象并指向該對象,在本文中,我不僅將分享在 Java 中Immutable的步驟,還將討論可變對象與不可變對象及其優(yōu)缺點2023-11-11