亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

簡介

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

實例

需求:有如下初始數(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的下標倒序遍歷

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);
}

結果

[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);
}

結果

[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);
}

結果

[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);
}

結果(報異常)

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的下標正序遍歷

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);
}

結果(有的沒有刪除掉)

[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個元素(錯誤版)
     * 執(zhí)行結果:沒有完全刪除。打印結果:[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個元素(錯誤版)
     *  執(zhí)行結果:元素沒有刪除。打印結果:[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個(錯誤版)
     * 執(zhí)行結果:報錯。打印結果:
     *   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因為沒有第四個元素,于是報索引越界錯誤
     */
    public static void method3() {
        int len = list.size();
        for (int i = 0; i < len; i++) {
            list.remove(i);
        }
        System.out.println(list);
    }
 
    /**
     * 方法四:只取一次長度刪除第0個(正確版)
     * 執(zhí)行結果:完全刪除。打印結果:[]
     */
    /**
     * 下面遍歷操作過程如下:
     * 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的正確的刪除方法的詳細內容,更多關于Java List刪除方法的資料請關注腳本之家其它相關文章!

相關文章

  • 面試題:用 Java 逆序打印鏈表

    面試題:用 Java 逆序打印鏈表

    這篇文章主要介紹了面試題:用 Java 逆序打印鏈表,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • Java如何批量執(zhí)行datax腳本

    Java如何批量執(zhí)行datax腳本

    這篇文章主要介紹了Java如何批量執(zhí)行datax腳本問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • java 解析user-agent 信息

    java 解析user-agent 信息

    這篇文章主要介紹了java 解析http user-agent的信息的相關資料,需要的朋友可以參考下
    2016-07-07
  • 深入理解Java注解的使用方法

    深入理解Java注解的使用方法

    這篇文章主要為大家詳細介紹了Java注解的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Java三大特性-封裝知識小結

    Java三大特性-封裝知識小結

    所有的面向對象編程語言的思路都是差不多的,而這三大特性,則是思路中的支柱點,接下來我就重點講解了一下java三大特性-封裝,感興趣的朋友跟隨腳本之家小編一起看看吧
    2018-03-03
  • servlet實現(xiàn)用戶登錄小程序

    servlet實現(xiàn)用戶登錄小程序

    這篇文章主要為大家詳細介紹了servlet實現(xiàn)用戶登錄的小程序,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • Mybatisplus自動填充實現(xiàn)方式及代碼示例

    Mybatisplus自動填充實現(xiàn)方式及代碼示例

    這篇文章主要介紹了Mybatisplus自動填充實現(xiàn)方式及代碼示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • 一篇文章帶你深入了解Java線程池

    一篇文章帶你深入了解Java線程池

    這篇文章主要介紹了Java 線程池的相關資料,文中講解非常細致,幫助大家更好的理解和學習,感興趣的朋友可以了解下,希望能給你帶來幫助
    2021-08-08
  • JDK源碼Enum類原理及代碼實例解析

    JDK源碼Enum類原理及代碼實例解析

    這篇文章主要介紹了JDK源碼Enum類原理及代碼實例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11
  • IDEA 必要配置設置方式

    IDEA 必要配置設置方式

    這篇文章主要介紹了IDEA 必要配置設置方式,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04

最新評論