国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java從List中刪除元素的正確用法

這篇具有很好參考價值的文章主要介紹了Java從List中刪除元素的正確用法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

還是先舉個例子,你侄女對天文知識感興趣,然后你就用程序寫了太陽系九大星系(水星、金星、地球、火星、木星、土星、天王星、海王星、冥王星)的運行軌跡圖,然后拿給侄女看。然后她說錯了錯了,你的知識太舊了,多了一顆星。根據2006年8月24日國際天文聯合大會召開,在會議上經過投票表決,冥王星被降級為矮行星,太陽系目前只剩下八顆行星。所以你需要刪除一顆星。這個時候你打開電腦開始刪除冥王星。

Java從List中刪除元素的正確用法

?你從下面List中刪除一顆星。

List<String> tempList = Arrays.asList("水星","金星","地球","火星",
"木星","土星","天王星","海王星","冥王星","冥王星");

怎么刪除List中的冥王星呢?[PS為了演示某些刪除方法不可靠,重復寫了冥王星] 。

先寫一段阿里規(guī)約:

【強制】不要再foreach循環(huán)里進行元素的remove/add操作,remove元素請使用Iterator方式,如果并發(fā)的操作,需要對Iterator對象加鎖。

好了,那就讓我們來寫所有可能刪除元素的方法

Java從List中刪除元素的正確用法

1:普通的for循環(huán)的刪除(不可靠)。

List<String> list = new ArrayList(tempList);
         for (int i = 0; i < list.size(); i++) {
            String str = list.get(i);
            if ("冥王星".equals(str)) {
                list.remove(i);
            }
        }
        System.out.println(list);

?運行結果如下:

[水星,?金星,?地球,?火星,?木星,?土星,?天王星,? ? 海王星,?冥王星]

奇了怪了,沒刪除干凈?

問題出在 list.size(),因為 list.size() 和 i 都是動態(tài)變化的,i 的值一直在累加,list.size() 一直在減少,所以 list 就會早早結束了循環(huán)。所以這種方式雖然不會報錯,但存在隱患,并且不容易被察覺,不建議使用。

2:普通的for循環(huán)提取變量進行刪除(這個更不可靠,會報錯)。

List<String> list = new ArrayList(tempList);
        int size = list.size();
        for (int i = 0; i < size; i++) {
            String result = list.get(i);
            if ("冥王星".equals(result)) {
                list.remove(i);
            }
        }
        System.out.println(list);

結果如下:

Java從List中刪除元素的正確用法

?這更不對了,一下子搞出個下標越界。

因為 size 變量是固定的,但 list 的實際大小是不斷減小的,而 i 的大小是不斷累加的,一旦 i >= list 的實際大小肯定就異常了。

3:普通的for循環(huán)倒敘刪除(這個用法可以)。

for (int i = list.size() - 1; i > 0; i--) {
            String result = list.get(i);
            if ("冥王星".equals(result)) {
                list.remove(i);
            }
        }
        System.out.println(list);

運行結果如下:

[水星,?金星,?地球,?火星,?木星,?土星,?天王星,?海王星]

4:使用增強的for循環(huán)刪除(會拋出異常,不推薦,注意我這次為了演示效果,把行星的順序換一下),不少開發(fā)者喜歡用這種方式。

List<String> tempList = Arrays.asList("水星","金星","地球","火星",
"冥王星","土星","天王星","海王星","冥王星","木星");
         List<String> list = new ArrayList(tempList);
        for (String item : list) {
            if ("冥王星".equals(item)) {
                list.remove(item);
            }
        }
        System.out.println(list);

結果如下:

Java從List中刪除元素的正確用法

奇了怪了,又拋異常了。不過這次的異常和上面的下標異常不太一樣,這次是:

java.util.ConcurrentModificationException?

這個是集合操作中很常見的異常之一,即并發(fā)修改異常!

增強的 for循環(huán),其內部是調用的 Iterator 的方法,取下個元素的時候都會去判斷要修改的數量(modCount)和期待修改的數量(expectedModCount)是否一致,不一致則會報錯,而 ArrayList 中的 remove 方法并沒有同步期待修改的數量(expectedModCount)值,所以會拋異常了。

5、迭代器循環(huán)迭代器刪除(可靠,也是十分推薦的用法)。

Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String item = iterator.next() ;
            if ("冥王星".equals(item)){
                iterator.remove();
            }
        }
        System.out.println(list);

結果如下,十分完美和正確:

[水星, 金星, 地球, 火星, 土星, 天王星, 海王星, 木星]

這是因為迭代器中的 remove 方法將期待修改的數量(expectedModCount)值進行了同步。

Java從List中刪除元素的正確用法

6:迭代器循環(huán)集合刪除(這個可能很多開發(fā)者也會這樣寫,也可能會拋出異常的)。

Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()){
            String item = iterator.next() ;
            if ("冥王星".equals(item)){
                list.remove(item);
            }
        }
        System.out.println(list);

?結果如下:

Java從List中刪除元素的正確用法

7:Stream filter 過濾(十分推薦,當然使用這個刪除需要JDK的環(huán)境在8及其8以上的版本)。

list = list.stream().filter(item -> !"冥王星".equals(item)).
 collect(Collectors.toList());
 System.out.println(list);

?結果如下,十分完美和正確:

Java從List中刪除元素的正確用法

這個方法利用了 Stream 的篩選功能,快速過濾所需要的元素,雖然不是進行集合刪除,但達到了同樣的目的,這種方法要更簡潔

看了上面的幾個例子,相信你熟悉了List刪除元素的用法了,希望你看了上面的例子,開發(fā)的時候不會再犯錯了。。。。

?文章來源地址http://www.zghlxwxcb.cn/news/detail-485895.html

到了這里,關于Java從List中刪除元素的正確用法的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • java 兩個list比較,刪除相同的元素

    java 兩個list比較,刪除相同的元素

    概述 在Java開發(fā)中,經常需要比較兩個List并刪除相同的元素。本文將介紹整個流程,并提供相應的代碼示例,幫助新手開發(fā)者完成這個任務。 流程 下面是比較兩個List并刪除相同元素的流程: 代碼示例 創(chuàng)建兩個List 我們首先需要創(chuàng)建兩個List對象,分別代表待比較的兩個列表

    2024年02月07日
    瀏覽(27)
  • Java 定義返回一個不能被修改、刪除元素的List

    Java 定義返回一個不能被修改、刪除元素的List

    ? 為啥突然分享下這個,也是從mybatis源碼看到了,所以想分享下: org.apache.ibatis.plugin.InterceptorChain ? 使用?Collections.unmodifiableList(); 示例: 運行效果: 不給動。 ?

    2024年02月13日
    瀏覽(45)
  • 怎么使用ddns域名,舉個例子,列出詳細步驟

    使用DDNS域名的步驟如下: 選擇一個DDNS服務提供商,比如No-IP或DynDNS。 在DDNS服務提供商的網站上注冊一個賬號,并創(chuàng)建一個域名。 在路由器上設置DDNS,將剛剛創(chuàng)建的域名與您的賬號信息關聯起來。 測試您的域名是否可以訪問您的網絡。 如果您有防火墻,請確保允許對您的

    2024年02月14日
    瀏覽(16)
  • python 一次性刪除列表(list)的空白元素(空內容) 或者 一次性刪除列表(list)中的指定元素

    看看下述代碼: 輸出: 當你遇見這種情況,有哪些方法來去除里面的空內容呢(即 \\\'\\\' )? 1.1 刪除空內容(方法一) : 輸出: 1.2 刪除空內容(方法二) : 需要 配合 lambda 表達式 一起使用! 輸出: 2.3 刪除指定內容 : 輸出: 注 :此方法既可以刪除空元素,也可以刪除指

    2024年02月03日
    瀏覽(304)
  • List集合刪除指定元素-四種方法

    List集合刪除指定元素-四種方法

    第一種 for循環(huán) 輸出結果為 第二種 迭代器 輸出結果為 第三種 stream流 這種過濾是留下符合條件的元素 輸出結果為 第四種 removeIf 方法以及 方法引用 removeIf 方法是jdk1.8 Collection以及其子類新增的,作用是過濾指定條件的元素 輸出結果為 總結 不言而喻,第四種方法最好用。

    2024年02月09日
    瀏覽(26)
  • 8 種循環(huán)刪除 List 元素的方法:

    public?ListString?list?=?Arrays.asList(\\\"張三\\\",?\\\"李四\\\",?\\\"王五\\\",?\\\"老六\\\",?\\\"李東\\\",?\\\"李想\\\",?\\\"茍八\\\"); 普通 for 循環(huán)刪除(不可靠) 普通 for 循環(huán)提取變量刪除(拋異常) 普通 for 循環(huán)倒序刪除(可靠) public?void?remove()?{ ????ListString?list?=?new?ArrayList(initList); ????for?(int?i?=?li

    2024年01月20日
    瀏覽(24)
  • list刪除重復元素幾種思路

    list刪除重復元素幾種思路

    distinct()是Java 8 中 Stream 提供的方法,返回的是由該流中不同元素組成的流。distinct()使用 hashCode() 和 eqauls() 方法來獲取不同的元素。 因此,需要去重的類必須實現 hashCode() 和 equals() 方法。換句話講,我們可以通過重寫定制的 hashCode() 和 equals() 方法來達到某些特殊需求的去重

    2024年02月14日
    瀏覽(21)
  • Python list列表刪除元素(4種方法)

    Python list列表刪除元素(4種方法)

    在?Python列表中刪除元素主要分為以下 3 種場景: 根據目標元素所在位置的索引進行刪除,可以使用 del 或者 pop() 方法; 根據元素本身的值進行刪除,可使用列表(list類型)提供的 remove() 方法; 將列表中所有元素全部刪除,可使用列表(list類型)提供的 clear() 方法

    2024年02月02日
    瀏覽(117)
  • STL--list如何實現元素的插入和刪除

    STL--list如何實現元素的插入和刪除

    在C++標準模板庫(STL)中,std::list 是一個雙向鏈表。由于它的雙向鏈表特性,std::list 支持在任何位置高效地插入和刪除元素。 元素插入: ●使用 push_back() 在列表尾部添加元素; ●使用 push_front() 在列表頭部添加元素; ●使用 insert() 在指定位置插入元素。這需要一個迭代器

    2024年04月12日
    瀏覽(28)
  • <List<Map<String,String>>> 刪除元素常見的誤區(qū)以及刪除方法

    看到這么標題可能覺得這個真是太easy了,不就remove嗎,分分鐘搞定。 但結果卻出乎意料,下面我們來j簡單說說list刪除數據可能遇到的坑: 先說明我們可能會遇到的兩個問題: 1.java.lang.IndexOutOfBoundsException(索引越界) 2.java.util.ConcurrentModificationException(并發(fā)修改異常) 開始測試

    2024年02月12日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包