最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Iterator刪除List中的多個元素操作

 更新時間:2020年09月28日 09:52:23   作者:Freefish1994  
這篇文章主要介紹了使用Iterator刪除List中的多個元素操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

今天在寫代碼時要刪除List中的多個元素時犯了一個很搞笑的錯誤,等效的就是以下代碼

  public static void main(String[] args) {
    List<String> a = new ArrayList<String>();
    a.add("1");
    a.add("2");
    a.add("3");
    a.add("4");
    a.add("5");
    Iterator<String> iterator = a.iterator();
    while(iterator.hasNext()){
      if("1".equals(iterator.next()) || "2".equals(iterator.next()))
        iterator.remove();
    }
  }

運行后發(fā)現(xiàn)只能刪除“1”這個元素,“2”刪除不掉,后來才發(fā)現(xiàn)判斷的時候如果第一個條件不滿足,iterator.next()這個方法又會執(zhí)行一遍,相當(dāng)于已經(jīng)不再是當(dāng)前的元素了,當(dāng)時寫的還特別順溜。。。

應(yīng)該改成下面 這樣

while(iterator.hasNext()){
  String str = iterator.next();
  if("1".equals(str) || "2".equals(str))
    iterator.remove();
}

把當(dāng)前指向的元素單獨提出來放在條件判斷里面,平時在寫普通循環(huán)的時候?qū)懥?xí)慣了,沒有把循環(huán)中的元素提出來。

記錄一下

補充知識:Iterator遍歷集合時不可以刪除集合中的元素問題

博客用于記錄編程是遇到的問題,便于以后隨時復(fù)習(xí)。

Iterator是工作在一個獨立的線程中,擁有一個mutex鎖。Iterator被創(chuàng)建后會建立一個指向原來對象的單鏈索引表,當(dāng)原來的對象數(shù)量發(fā)生變化時,這個索引表的內(nèi)容不會同步改變,所以當(dāng)索引指針向后面移動的時候就找不到要迭代的對象,按照fail-fast原則,Iterator會馬上拋出 java.util.ConcurrentModificationException異常。

所以,在Iterator工作時,不允許迭代對象被改變。但可以使用Iterator本身的方法iterator.remove()來刪除對象,該方法會在刪除當(dāng)前迭代對象的同時維護索引的一致性。舉例:

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class TestIterator {
public void iteratorDelete(List<Integer>list){
Iterator<Integer> it=list.iterator();
while(it.hasNext()){
Integer integer=it.next();
if (integer<20) {
//可以刪除
it.remove();
//運行時異常
// list.remove(integer);
}
}
System.out.println(list.toString());
}
public static void main(String[] args) {
List<Integer>list=new ArrayList<>();
list.add(18);
list.add(20);
list.add(30);
list.add(40);
TestIterator testIterator=new TestIterator();
testIterator.iteratorDelete(list);
}
}

以上這篇使用Iterator刪除List中的多個元素操作就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 學(xué)習(xí)非阻塞的同步機制CAS

    學(xué)習(xí)非阻塞的同步機制CAS

    現(xiàn)代的處理器都包含對并發(fā)的支持,其中最通用的方法就是比較并交換(compare and swap),簡稱CAS。下面我們來一起學(xué)習(xí)一下吧
    2019-05-05
  • spring-boot項目啟動遲緩異常排查解決記錄

    spring-boot項目啟動遲緩異常排查解決記錄

    這篇文章主要為大家介紹了spring-boot項目啟動遲緩異常排查解決記錄,突然在本地啟動不起來了,表象特征就是在本地IDEA上運行時,進程卡住也不退出,應(yīng)用啟動時加載相關(guān)組件的日志也不輸出
    2022-02-02
  • feign調(diào)用中文參數(shù)被encode編譯的問題

    feign調(diào)用中文參數(shù)被encode編譯的問題

    這篇文章主要介紹了feign調(diào)用中文參數(shù)被encode編譯的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • 解決springboot報錯Failed?to?parse?multipart?servlet?request;?nested?exception?is?java.io.IOException問題

    解決springboot報錯Failed?to?parse?multipart?servlet?request

    在使用SpringBoot開發(fā)時,通過Postman發(fā)送POST請求,可能會遇到因臨時目錄不存在而導(dǎo)致的MultipartException異常,這通常是因為OS系統(tǒng)(如CentOS)定期刪除/tmp目錄下的臨時文件,解決方案包括重啟項目
    2024-10-10
  • Java編寫程序之輸入一個數(shù)字實現(xiàn)該數(shù)字階乘的計算

    Java編寫程序之輸入一個數(shù)字實現(xiàn)該數(shù)字階乘的計算

    這篇文章主要介紹了Java編寫程序之輸入一個數(shù)字實現(xiàn)該數(shù)字階乘的計算,本文通過實例代碼給大家介紹的非常想詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • mybatis關(guān)于Criteria使用的小坑

    mybatis關(guān)于Criteria使用的小坑

    這篇文章主要介紹了mybatis關(guān)于Criteria使用的小坑,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 解析MyBatis源碼實現(xiàn)自定義持久層框架

    解析MyBatis源碼實現(xiàn)自定義持久層框架

    這篇文章主要介紹了手撕MyBatis源碼實現(xiàn)自定義持久層框架,涉及到的設(shè)計模式有Builder構(gòu)建者模式、??模式、代理模式,本文通過示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • mybatis-plus 版本不兼容問題的解決

    mybatis-plus 版本不兼容問題的解決

    這篇文章主要介紹了mybatis-plus 版本不兼容問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java隨機抽取指定范圍內(nèi)不重復(fù)的n個數(shù)

    java隨機抽取指定范圍內(nèi)不重復(fù)的n個數(shù)

    這篇文章主要為大家詳細(xì)介紹了java隨機抽取指定范圍內(nèi)不重復(fù)的n個數(shù),感興趣的小伙伴們可以參考一下
    2016-02-02
  • 簡單理解Spring之IOC和AOP及代碼示例

    簡單理解Spring之IOC和AOP及代碼示例

    這篇文章主要介紹了簡單理解Spring之IOC和AOP及代碼示例,具有一定參考價值,需要的朋友可以了解下。
    2017-12-12

最新評論

渝中区| 威远县| 南开区| 宣威市| 宁国市| 新源县| 伊川县| 潢川县| 灵武市| 银川市| 神木县| 渭源县| 鄯善县| 三原县| 兰西县| 定襄县| 江川县| 石首市| 宁城县| 长顺县| 东方市| 定南县| 甘南县| 裕民县| 平原县| 大同县| 佛山市| 杨浦区| 富民县| 东辽县| 巧家县| 冀州市| 麟游县| 荆州市| 山东| 尼玛县| 封丘县| 肃南| 通许县| 宝兴县| 湘西|