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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

List遍历删除注意事项

發布時間:2025/3/14 编程问答 13 豆豆
生活随笔 收集整理的這篇文章主要介紹了 List遍历删除注意事项 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、遍歷集合刪除元素

(1)、容易出現的問題:

1 package collectionDemo.list; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 public class ListDemo { 7 8 public static void main(String[] args) { 9 List<String> sList = new ArrayList<String>(); 10 sList.add("0"); 11 sList.add("1"); 12 sList.add("2"); 13 sList.add("3"); 14 sList.add("4"); 15 System.out.println(sList); 16 // 對list進行遍歷,并按條件進行刪除 17 for (int i = 0; i < sList.size(); i++) { 18 if (i == 1 || i == 2) { 19 sList.remove(i); 20 } 21 } 22 System.out.println(sList); 23 24 } 25 26 }

輸出結果為:

[0, 1, 2, 3, 4]
[0, 2, 4]

  乍一看代碼,像是實現刪除索引為1和2的元素。但執行結果卻并非如此。在執行遍歷集合刪除元素時,當i==1時,集合remove掉索引為1(i)的元素,移除字符串1,此處是正常邏輯。但執行到i==2時,remove的卻是字符串3。原因如下:

  使用普通for循環遍歷ArrayList時,是以索引為依據進行遍歷的。在遍歷過程中remove元素會導致索引的混亂。比如上例中,當remove(1)后,集合size將發生變化,元素將變少,字符串2所對應的索引將由2變為1,后邊的字符串3和4依次類推索引變為2和3,執行下一次循環時,i++為2,此時remove的是字符串3,所以導致了上述結果。

(2)解決方案1:

public class ListDemo {7 8 public static void main(String[] args) {9 List<String> sList = new ArrayList<String>(); 10 sList.add("0"); 11 sList.add("1"); 12 sList.add("2"); 13 sList.add("3"); 14 sList.add("4"); 15 System.out.println(sList); 16 // 對list進行遍歷,并按條件進行刪除 17 for (int i = 0; i < sList.size(); i++) { 18 if (i == 1 || i == 2) { 19 sList.remove(i);i--; 20 } 21 } 22 System.out.println(sList); 23 24 }

添加了刪除元素后對下標i進行i--操作,保證下標不錯亂。

(3)解決方案2:

使用迭代器對集合進行遍歷,并進行集合中元素的刪除操作,如:

public class ListDemo {public static void main(String[] args) {List<String> sList = new ArrayList<String>();sList.add("0");sList.add("1");sList.add("2");sList.add("3");sList.add("4");System.out.println(sList);Iterator<String> iterator=sList.iterator();while(iterator.hasNext()){String item=iterator.next();if(item.equals("1")){iterator.remove();//sList.remove(item);注釋的用法是錯誤用法,迭代器中的迭代需使用迭代器進行刪除操作,不能在使用集合的remove方法,此種用法會導致java.util.ConcurrentModificationException }}System.out.println(sList);}}

以上舉例以list為例,同理在map集合中存在同樣的問題,舉一反三。

?

轉載于:https://www.cnblogs.com/silenceshining/p/7492490.html

總結

以上是生活随笔為你收集整理的List遍历删除注意事项的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。