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

詳解Java中List的正確的刪除方法

 更新時(shí)間:2022年05月19日 08:23:12   作者:IT利刃出鞘  
這篇文章主要為大家詳細(xì)介紹了Java中List的正確的刪除方法,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)有一定幫助,需要的可以參考一下

簡介

本文介紹Java的List的正確的刪除方法。

實(shí)例

需求:有如下初始數(shù)據(jù),將list中的所有數(shù)據(jù)為"b"的元素刪除掉。即:填充removeB()方法

package com.example.a;
 
import java.util.ArrayList;
import java.util.List;
 
public class Demo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("b");
        list.add("c");
        list.add("d");
 
        removeB(list);
    }
 
    private static void removeB(List<String> list) {
        // 待填充
    }
}

正確方法

法1:for的下標(biāo)倒序遍歷

private static void removeB(List<String> list) {
    for (int i = list.size() - 1; i >= 0; i--) {
        if ("b".equals(list.get(i))) {
            list.remove(i);
        }
    }
    System.out.println(list);
}

結(jié)果

[a, c, d]

法2: list.stream().filter().collect()

private static void removeB(List<String> list) {
    List<String> newList = list.stream()
            .filter(e -> !"b".equals(e))
            .collect(Collectors.toList());
    System.out.println(newList);
}

結(jié)果

[a, c, d]

法3: iterator迭代器

private static void removeB(List<String> list) {
    Iterator<String> it = list.iterator();
    while (it.hasNext()) {
        String s = it.next();
        if ("b".equals(s)) {
            it.remove();
        }
    }
    System.out.println(list);
}

結(jié)果

[a, c, d]

錯誤方法

法1:for(xxx : yyy)遍歷

private static void removeB(List<String> list) {
    for (String s : list) {
        if ("b".equals(s)) {
            list.remove(s);
        }
    }
    System.out.println(list);
}

結(jié)果(報(bào)異常)

Exception in thread "main" java.util.ConcurrentModificationException
    at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
    at java.util.ArrayList$Itr.next(ArrayList.java:859)
    at com.example.a.Demo.removeB(Demo.java:18)
    at com.example.a.Demo.main(Demo.java:14)

法2:for的下標(biāo)正序遍歷

private static void removeB(List<String> list) {
    for (int i = 0; i < list.size(); i++) {
        if ("b".equals(list.get(i))) {
            list.remove(list.get(i));
        }
    }
    System.out.println(list);
}

結(jié)果(有的沒有刪除掉)

[a, b, c, d]

原因分析

需求:通過遍歷把list集合的所有數(shù)據(jù)刪除掉。

package com.example.a;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
 
public class Demo {
    private static List<String> list = new ArrayList<>();
 
    public static void main(String[] args) {
        reset();
        // method1();
        // method2();
        // method3();
        // method4();
    }
 
    private static void reset(){
        list.clear();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        list.add("e");
    }
 
    /**
     * 方法一:遍歷刪除第i個(gè)元素(錯誤版)
     * 執(zhí)行結(jié)果:沒有完全刪除。打印結(jié)果:[b, d]
     */
    /**
     * 下面遍歷操作過程如下:
     * i = 0    list.size() == 5   執(zhí)行完第一次list.remove(0);  list剩下[b,c,d,e]
     * i = 1    list.size() == 4   執(zhí)行完第二次list.remove(1);  list剩下[b,d,e]
     * i = 2    list.size() == 3   執(zhí)行完第三次list.remove(2);  list剩下[b,d]
     * i = 3    list.size() == 2   i > list.size()所以條件不滿足,最后剩下[b,d]
     */
    public static void method1() {
        for (int i = 0; i< list.size(); i++) {
            list.remove(i);
        }
        System.out.println(list);
    }
 
    /**
     * 方法二:刪除第0個(gè)元素(錯誤版)
     *  執(zhí)行結(jié)果:元素沒有刪除。打印結(jié)果:[d, e]
     */
    /**
     * 下面遍歷操作過程如下:
     * i = 0    list.size() == 5   執(zhí)行完第一次list.remove(0);  list剩下[b,c,d,e]
     * i = 1    list.size() == 4   執(zhí)行完第二次list.remove(0);  list剩下[c,d,e]
     * i = 2    list.size() == 3   執(zhí)行完第三次list.remove(0);  list剩下[d,e]
     * i = 3    list.size() == 2   i > list.size()所以條件不滿足,最后剩下[d,e]
     */
    public static void method2() {
        for (int i = 0; i< list.size(); i++) {
            list.remove(0);
        }
        System.out.println(list);
    }
 
    /**
     * 方法三:只取一次長度刪除第i個(gè)(錯誤版)
     * 執(zhí)行結(jié)果:報(bào)錯。打印結(jié)果:
     *   Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 2
     */
    /**
     * 只求取list.size()長度一次
     * i == 0 len == 5 list.remove(0) list剩下[b,c,d,e]
     * i == 1 len == 5 list.remove(1) list剩下[b, d,e]
     * i == 2 len == 5 list.remove(2) list剩下[b, d]
     * i == 3 len == 5 list.remove(3) list因?yàn)闆]有第四個(gè)元素,于是報(bào)索引越界錯誤
     */
    public static void method3() {
        int len = list.size();
        for (int i = 0; i < len; i++) {
            list.remove(i);
        }
        System.out.println(list);
    }
 
    /**
     * 方法四:只取一次長度刪除第0個(gè)(正確版)
     * 執(zhí)行結(jié)果:完全刪除。打印結(jié)果:[]
     */
    /**
     * 下面遍歷操作過程如下:
     * i = 0    len == 5   執(zhí)行完第一次list.remove(0);  list剩下[b,c,d,e]
     * i = 1    len == 5   執(zhí)行完第二次list.remove(0);  list剩下[c,d,e]
     * i = 2    len == 5   執(zhí)行完第三次list.remove(0);  list剩下[d,e]
     * i = 3    len == 5   執(zhí)行完第四次list.remove(0);  list剩下[e]          
     * i = 4    len == 5   執(zhí)行完第五次list.remove(0);   list剩下[]
     */
    public static void method4() {
        int len = list.size(); // 保證只獲取一次長度
        for (int i = 0; i< len; i++) {
            list.remove(0);
        }
        System.out.println(list);
    }
}

以上就是詳解Java中List的正確的刪除方法的詳細(xì)內(nèi)容,更多關(guān)于Java List刪除方法的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • spring boot actuator監(jiān)控超詳細(xì)教程

    spring boot actuator監(jiān)控超詳細(xì)教程

    Spring Boot Actuator就是一款可以幫助你監(jiān)控系統(tǒng)數(shù)據(jù)的框架,其可以監(jiān)控很多很多的系統(tǒng)數(shù)據(jù),接下來通過本文給大家介紹spring boot actuator監(jiān)控超詳細(xì)教程,感興趣的朋友一起看看吧
    2021-10-10
  • 超詳細(xì)的Java 問題排查工具單

    超詳細(xì)的Java 問題排查工具單

    這篇文章主要介紹了超詳細(xì)的Java 問題排查工具單,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • java8?Stream大數(shù)據(jù)量List分批處理切割方式

    java8?Stream大數(shù)據(jù)量List分批處理切割方式

    這篇文章主要介紹了java8?Stream大數(shù)據(jù)量List分批處理切割方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • SpringBoot之QueryDsl嵌套子查詢問題

    SpringBoot之QueryDsl嵌套子查詢問題

    這篇文章主要介紹了SpringBoot之QueryDsl嵌套子查詢問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • Java中怎樣使用JSON進(jìn)行文件解析

    Java中怎樣使用JSON進(jìn)行文件解析

    這篇文章主要介紹了Java中怎樣使用JSON進(jìn)行文件解析問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 詳解SpringBoot中@PostMapping注解的用法

    詳解SpringBoot中@PostMapping注解的用法

    在SpringBoot中,我們經(jīng)常需要編寫RESTful Web服務(wù),以便于客戶端與服務(wù)器之間的通信,@PostMapping注解可以讓我們更方便地編寫POST請求處理方法,在本文中,我們將介紹@PostMapping注解的作用、原理,以及如何在SpringBoot應(yīng)用程序中使用它
    2023-06-06
  • SpringBoot依賴管理特性詳解

    SpringBoot依賴管理特性詳解

    Spring Boot自動引入依賴的版本信息可以在`spring-boot-starter-parent`和`spring-boot-dependencies`的pom文件中找到,如果需要修改依賴版本,可以在項(xiàng)目pom文件中添加覆蓋配置項(xiàng)并刷新依賴即可
    2025-01-01
  • JVM鉤子函數(shù)的使用場景詳解

    JVM鉤子函數(shù)的使用場景詳解

    當(dāng)jvm進(jìn)程退出的時(shí)候,或者受到了系統(tǒng)的中斷信號,hook線程就會啟動,一個(gè)線程可以注入多個(gè)鉤,下面這篇文章主要給大家介紹了關(guān)于JVM鉤子函數(shù)使用的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • Java中使用opencsv讀寫csv文件示例

    Java中使用opencsv讀寫csv文件示例

    這篇文章主要介紹了Java中使用opencsv讀寫csv文件示例,本文給出了讀CSV文件、寫CSV文件、自定義分隔符、生成Javabeans等內(nèi)容,需要的朋友可以參考下
    2015-04-04
  • IDEA之web項(xiàng)目導(dǎo)入jar包方式

    IDEA之web項(xiàng)目導(dǎo)入jar包方式

    這篇文章主要介紹了IDEA之web項(xiàng)目導(dǎo)入jar包方式,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05

最新評論

陕西省| 黄浦区| 凤凰县| 泗洪县| 克拉玛依市| 方正县| 济阳县| 丰台区| 宁德市| 阳东县| 澄城县| 克拉玛依市| 东丽区| 巴林右旗| 佛山市| 蒙山县| 克什克腾旗| 从化市| 凭祥市| 广东省| 莱芜市| 泰来县| 特克斯县| 东山县| 浙江省| 伽师县| 晋江市| 五原县| 岫岩| 秦安县| 黔江区| 龙泉市| 南宫市| 巩义市| 达尔| 定远县| 碌曲县| 临颍县| 修文县| 射阳县| 乐平市|