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

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

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

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

(1)增強(qiáng)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]

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

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 中的一個(gè)運(yùn)行時(shí)異常,它發(fā)生在我們試圖在單線程的環(huán)境下修改一個(gè)集合對象的同時(shí),另一個(gè)線程也在修改同一個(gè)集合對象時(shí)。

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

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

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

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

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

(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.刪除指定下標(biāo)元素

(1)remove(index)方法

這是List接口提供的一個(gè)方法,可以直接刪除指定下標(biāo)位置的元素,使用此方法,需要傳要?jiǎng)h除的元素下標(biāo)。

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,1,2,3,4,5));
System.out.println("list刪除前:" + list);
//刪除list下標(biāo)為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的元素:該方法返回源列表的一個(gè)子列表,包含從fromIndex(包含)到toIndex(不包含)之間的所有元素。如果fromIndex和toIndex相同,則返回一個(gè)空的子列表。

ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1,2,3,1,2,3,4,5));
System.out.println("list刪除前:" + list);
//刪除下標(biāo)為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是開源的代碼生成庫,是一款非常實(shí)用的小工具,在更改實(shí)體類時(shí)只需要修改屬性即可,減少了很多重復(fù)代碼的編寫工作,今天小編給大家介紹idea中l(wèi)ombok的用法,感興趣的朋友一起看看吧
    2021-12-12
  • Java實(shí)現(xiàn)的猜數(shù)字游戲示例

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

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

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

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

    Java使用dom4j解析XML

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

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

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

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

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

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

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

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

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

    政和县| 呼图壁县| 上饶县| 惠东县| 姚安县| 黄山市| 望江县| 山东省| 台江县| 城口县| 墨竹工卡县| 阿鲁科尔沁旗| 内乡县| 重庆市| 绥化市| 五原县| 肥乡县| 西华县| 红桥区| 揭东县| 武胜县| 盐城市| 永昌县| 依安县| 肇庆市| 安西县| 望谟县| 邯郸市| 靖安县| 宜州市| 横山县| 正定县| 修水县| 平顶山市| 祁连县| 菏泽市| 宁晋县| 全椒县| 兰考县| 清涧县| 都兰县|