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

Java?list移除元素相關(guān)操作指南

 更新時間:2024年12月25日 11:07:51   作者:煙雨江南不見卿  
這篇文章主要給大家介紹了關(guān)于Java?list移除元素相關(guān)操作的相關(guān)資料,文中介紹的方法包括增強for循環(huán)、迭代器、Stream流和removeIf()方法,同時還介紹了如何從一個列表中刪除包含另一個列表元素的方法,以及如何刪除指定下標位置的元素,需要的朋友可以參考下

1.刪除指定元素(四種方法)

(1)增強for(避免java.util.ConcurrentModificationException異常)

//如刪除能夠整除3的元素
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5,6,7,8,9,10));
//刪除前:
System.out.println(list);
for (Integer integer : new ArrayList<>(list)) {
    if (integer % 3 == 0){
        list.remove(integer);
       }
    }
//刪除后:
System.out.println(list);

結(jié)果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 4, 5, 7, 8, 10]

注意:上述代碼中刪除元素時,我遍歷時創(chuàng)建了集合對象的副本,對副本進行遍歷,對原數(shù)組進行了刪除,這是一種方式,沒法直接遍歷list并刪除,那樣會出現(xiàn)以下錯誤:

D:\java\jdk1.8.0_321\bin\java.exe "-javaagent:D:\softlocation\idea 2019\IntelliJ IDEA 2019.3.1\lib\idea_rt.jar=51701:D:\softlocation\idea 2019\IntelliJ IDEA 2019.3.1\bin" -Dfile.encoding=UTF-8 -classpath 
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Exception in thread "main" java.util.ConcurrentModificationException
	at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:911)
	at java.util.ArrayList$Itr.next(ArrayList.java:861)
	at com.sh.mu.script.logic.system.Likou.LiKouTest.main(LiKouTest.java:49)

java.util.ConcurrentModificationException 是 Java 中的一個運行時異常,它發(fā)生在我們試圖在單線程的環(huán)境下修改一個集合對象的同時,另一個線程也在修改同一個集合對象時。

為了避免這個異常,我們有以下幾種解決方案:

1.在單線程環(huán)境下,使用 Iterator 的 remove() 方法刪除元素,而不是直接修改集合對象。

2.在多線程環(huán)境下,使用線程安全的集合類,如 ConcurrentHashMap、CopyOnWriteArrayList 等。

3.在單線程環(huán)境下,創(chuàng)建集合對象的副本,對副本進行修改操作。

4.使用 Java 8 的 Lambda 表達式和流操作,而不是顯式使用迭代器。

(2)迭代器

//如刪除能夠整除3的元素
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5,6,7,8,9,10));
        //刪除前:
System.out.println(list);
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()){
  Integer next = iterator.next();
    if (next % 3 ==0){
      iterator.remove();
    }
 }
//刪除后:
System.out.println(list);

結(jié)果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 4, 5, 7, 8, 10]

(3)stream流

//如刪除能夠整除3的元素
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5,6,7,8,9,10));
//刪除前:
System.out.println(list);
List<Integer> integers = list.stream().filter(e -> e % 3 != 0).collect(Collectors.toList());

for (Integer integer : new ArrayList<>(list)) {
   if (integer % 3 == 0){
      list.remove(integer);
    }
 }
//刪除后:
System.out.println(integers);

結(jié)果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 4, 5, 7, 8, 10]

(4)removeIf()

//如刪除能夠整除3的元素
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5,6,7,8,9,10));
//刪除前:
System.out.println(list);
list.removeIf(integer -> integer % 3 == 0);
//刪除后:
System.out.println(list);

結(jié)果:

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[1, 2, 4, 5, 7, 8, 10]

2.從list2中刪除包含list1的元素

(1)for循環(huán)

注意遍歷和刪除不能操作同一數(shù)據(jù),避免并發(fā)修改帶來的問題。

ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1,2,3,6));
ArrayList<Integer> list2 = new ArrayList<>(Arrays.asList(1,2,3,1,2,3,4,5));

//刪除前
System.out.println("list1元素:" + list1);
System.out.println("list2刪除前:" + list2);
for (Integer integer : new ArrayList<>(list2)) {
    for (Integer integer1 : new ArrayList<>(list1)) {
        if (Objects.equals(integer, integer1)){
            list2.remove(integer1);
        }
    }

結(jié)果:

list1元素:[1, 2, 3, 6]
list2刪除前:[1, 2, 3, 1, 2, 3, 4, 5]
list2刪除后:[4, 5]

(2)removeAll()

ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1,2,3,6));
ArrayList<Integer> list2 = new ArrayList<>(Arrays.asList(1,2,3,1,2,3,4,5));
//刪除前
System.out.println("list1元素:" + list1);
System.out.println("list2刪除前:" + list2);
list2.removeAll(list1);
System.out.println("list2刪除后:" + list2);

結(jié)果:

list1元素:[1, 2, 3, 6]
list2刪除前:[1, 2, 3, 1, 2, 3, 4, 5]
list2刪除后:[4, 5]

(3)removeIf()

ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1,2,3,6));
ArrayList<Integer> list2 = new ArrayList<>(Arrays.asList(1,2,3,1,2,3,4,5));
//刪除前
System.out.println("list1元素:" + list1);
System.out.println("list2刪除前:" + list2);
  list2.removeAll(list1);
list2.removeIf(list1::contains);
System.out.println("list2刪除后:" + list2);

結(jié)果:

list1元素:[1, 2, 3, 6]
list2刪除前:[1, 2, 3, 1, 2, 3, 4, 5]
list2刪除后:[4, 5]

(4)stream流

使用Java8及以上版本的Stream API:首先利用stream()獲取流,然后使用filter過濾掉不需要的元素,最后使用collect方法收集結(jié)果。

ArrayList<Integer> list1 = new ArrayList<>(Arrays.asList(1,2,3,6));
ArrayList<Integer> list2 = new ArrayList<>(Arrays.asList(1,2,3,1,2,3,4,5));
//刪除前
System.out.println("list1元素:" + list1);
System.out.println("list2刪除前:" + list2);
List<Integer> collect = list2.stream().filter(e -> !list1.contains(e)).collect(Collectors.toList());
System.out.println("list2刪除后:" + collect);

結(jié)果:

list1元素:[1, 2, 3, 6]
list2刪除前:[1, 2, 3, 1, 2, 3, 4, 5]
list2刪除后:[4, 5]

3.刪除指定下標元素

(1)remove(index)方法

這是List接口提供的一個方法,可以直接刪除指定下標位置的元素,使用此方法,需要傳要刪除的元素下標。

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,1,2,3,4,5));
System.out.println("list刪除前:" + list);
//刪除list下標為1的元素
list.remove(1);
System.out.println("list刪除后:" + list);

結(jié)果:

list刪除前:[1, 2, 3, 1, 2, 3, 4, 5]
list刪除后:[1, 3, 1, 2, 3, 4, 5]

(2)subList(int fromIndex,int toIndex)方法

如:刪除下表1到3的元素:該方法返回源列表的一個子列表,包含從fromIndex(包含)到toIndex(不包含)之間的所有元素。如果fromIndex和toIndex相同,則返回一個空的子列表。

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,1,2,3,4,5));
System.out.println("list刪除前:" + list);
//刪除下標為1到3的元素
list.subList(1,3).clear();
System.out.println("list刪除后:" + list);

結(jié)果:

list刪除前:[1, 2, 3, 1, 2, 3, 4, 5]
list刪除后:[1, 1, 2, 3, 4, 5]

總結(jié)

到此這篇關(guān)于Java list移除元素相關(guān)操作指南的文章就介紹到這了,更多相關(guān)Java list移除元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • idea中l(wèi)ombok的用法

    idea中l(wèi)ombok的用法

    lombok是開源的代碼生成庫,是一款非常實用的小工具,在更改實體類時只需要修改屬性即可,減少了很多重復代碼的編寫工作,今天小編給大家介紹idea中l(wèi)ombok的用法,感興趣的朋友一起看看吧
    2021-12-12
  • Java實現(xiàn)的猜數(shù)字游戲示例

    Java實現(xiàn)的猜數(shù)字游戲示例

    這篇文章主要介紹了Java實現(xiàn)的猜數(shù)字游戲,涉及Java數(shù)學運算與判斷相關(guān)操作技巧,需要的朋友可以參考下
    2018-06-06
  • java web將數(shù)據(jù)導出為Excel格式文件代碼片段

    java web將數(shù)據(jù)導出為Excel格式文件代碼片段

    這篇文章主要為大家詳細介紹了java web將數(shù)據(jù)導出為Excel格式文件代碼片段,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-01-01
  • Java使用dom4j解析XML

    Java使用dom4j解析XML

    dom4j是一個開源的、基于Java的XML解析庫,而在Java中使用dom4j庫解析XML是一種常見的方法,下面就跟隨小編一起來學習一下Java如何使用dom4j解析XML吧
    2024-12-12
  • Java 隨機生成驗證碼(支持大小寫字母、數(shù)字、隨機字體)的實例

    Java 隨機生成驗證碼(支持大小寫字母、數(shù)字、隨機字體)的實例

    java隨機產(chǎn)生驗證碼,可以隨機生成數(shù)字、大寫字母、小寫字母。還可以隨機生成文字字體、及大小。在圖片上面可能字體都不不同、大小不等
    2013-05-05
  • Java中二叉樹數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)示例

    Java中二叉樹數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)示例

    這篇文章主要介紹了Java中二叉樹數(shù)據(jù)結(jié)構(gòu)的實現(xiàn)示例,包括前中后序遍歷和求二叉樹深度的方法,需要的朋友可以參考下
    2015-08-08
  • Java關(guān)系操作符簡寫介紹

    Java關(guān)系操作符簡寫介紹

    下面小編就為大家?guī)硪黄狫ava關(guān)系操作符簡寫介紹。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-05-05
  • Java接收text/event-stream格式數(shù)據(jù)的詳細代碼

    Java接收text/event-stream格式數(shù)據(jù)的詳細代碼

    這篇文章主要介紹了java接收text/event-stream格式數(shù)據(jù),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • 最新評論

    宜州市| 鄂伦春自治旗| 龙口市| 湘潭市| 西盟| 新河县| 桂阳县| 浦城县| 沙坪坝区| 漠河县| 岗巴县| 新平| 灵丘县| 呼玛县| 莱西市| 库车县| 米林县| 宝兴县| 衡阳市| 建始县| 通城县| 余江县| 鸡西市| 祁门县| 牙克石市| 廉江市| 石棉县| 当涂县| 鹿泉市| 于田县| 松溪县| 英吉沙县| 汉阴县| 凌云县| 吕梁市| 惠来县| 浦江县| 合江县| 泽州县| 象州县| 喀什市|