java中List数组遍历删除

Kent_Sun 等级 671 0 0

List数组遍历删除

环境

  • jdk8
  • junit 单元测试

正解

// 正解1, jdk自带的addAll方法
    @Test
    public void test18() {
        String[] strs = {"12","34","56","78","90"};
        List<String> list = Arrays.asList(strs);
        List<String> list2 = new ArrayList<>();
        list2.addAll(list);
        System.out.println(list);
        for (String s : list) {
            System.out.println(s);
            list2.remove(s);
        }
    }

// 正解2 Hutool的 CollUtil 工具类中addAll方法
    @Test
    public void test18() {
        String[] strs = {"12","34","56","78","90"};
        List<String> list = Arrays.asList(strs);
        List<String> list2 = new ArrayList<>();
        CollUtil.addAll(list2,list);
        System.out.println(list2);
        for (String s : list) {
            System.out.println(s);
            list2.remove(s);
        }
    }

boolean b = list1.removeIf(a -> (a % 2) == 0);
        System.out.println(b);

错解

新手代码踩坑日记

// 第一错
    @Test
    public void test18() {
         String[] strs = {"12","34","56","78","90"};
         List<String> list = Arrays.asList(strs);
         System.out.println(list);
         for (String s : list) {
             System.out.println(s);
             list.remove(s);
         }
    }

报错信息:

[12, 34, 56, 78, 90]
12

java.lang.UnsupportedOperationException  不支持的操作异常
    at java.util.AbstractList.remove(AbstractList.java:161)
    at java.util.AbstractList$Itr.remove(AbstractList.java:374)
    at java.util.AbstractCollection.remove(AbstractCollection.java:293)


// 第二错 : 老子新建个对象来存还是错??? 仔细想想-->TMD谁写的垃圾代码,好像是我写的...
// 方法栈里面就一个list对象,只是复制一份引用,而remove是直接操作数组内存空间
     @Test
    public void test18() {
        String[] strs = {"12","34","56","78","90"};
        List<String> list = Arrays.asList(strs);
        List<String> list2 = new ArrayList<>();
        list2 = list;
        System.out.println(list);
        for (String s : list) {
            System.out.println(s);
            list2.remove(s);
        }
    }

直接报错 +1:
[12, 34, 56, 78, 90]
12

java.lang.UnsupportedOperationException
    at java.util.AbstractList.remove(AbstractList.java:161)
    at java.util.AbstractList$Itr.remove(AbstractList.java:374)
    at java.util.AbstractCollection.remove(AbstractCollection.java:293)
收藏
评论区

相关推荐

Python中的基本list操作
List是python中的基本数据结构之一,和Java中的ArrayList有些类似,支持动态的元素的增加。list还支持不同类型的元素在一个列表中,List is an Object。 最基本的创建一个列表的方法 myList \'a','b','c'\ 在python中list也是对象,所以他也有方法和属性,在ptython解释器中 使用h
list集合的一些处理
做了一个消消乐类似的小游戏,其中需要打乱部分内容,用的list打乱的方式,特此笔记 Collections.sort(list); // 顺序排列 System.out.println(list); Collections.shuffle(list); // 混乱的意思 System.out.println(list);
java中List数组遍历删除
List数组遍历删除 环境 jdk8 junit 单元测试 正解java// 正解1, jdk自带的addAll方法 @Test public void test18() { String strs {"12","34","56","78","90"}; List<String list Ar
Java 中初始化 List 集合的 6 种方式!
![](https://oscimg.oschina.net/oscnet/0db5449d0736e22cb92ba0cf9daad91990a.jpg)   List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下。   1、常规方式   ListString
Java 中初始化 List 集合的 6 种方式!
![](https://oscimg.oschina.net/oscnet/26618d87-ed40-4f14-b290-16a3e22e57fe.png) List 是 Java 开发中经常会使用的集合,你们知道有哪些方式可以初始化一个 List 吗?这其中不缺乏一些坑,今天栈长我给大家一一普及一下。 1、常规方式 ------ Lis
Java 并发数据结构
\[TOCM\] 因为Java提供了一些非线程安全的数据结构如HashMap,ArrayList,HashSet等。所有在多线程环境中需要使用支持并发访问操作的数据结构。 #### 并发List Vector,CopyOnWriteArrayList 是线程安全的List。ArrayList是线程不安全的。如果一定要使用,需要: `Collection
Java 数组转 List 的 3 种方式,哪种性能最牛?
前言: --- 本文介绍Java中数组转为List三种情况的优劣对比,以及应用场景的对比,以及程序员常犯的类型转换错误原因解析。 一.最常见方式(未必最佳) ------------- 通过 `Arrays.asList(strArray)` 方式,将数组转换List后,不能对List增删,只能查改,否则抛异常。 关键代码:`List list =
Java中Map,List与Set的区别
首先,数组和集合的区别: * 数组是大小固定的 * 集合可以存储和操作数目不固定的一组数据,集合只能存放引用类型的的数据,不能存放基本数据类型 特性 -- ### List * 允许重复 * 有序 * 继承自`Connection` ### Set * 不允许重复 * 无序 * 继承自`Connection` #
Java中如何克隆集合——ArrayList和HashSet深拷贝
编程人员经常误用各个集合类提供的拷贝构造函数作为克隆`List`,`Set`,`ArrayList`,`HashSet`或者其他集合实现的方法。需要记住的是,Java集合的拷贝构造函数只提供浅拷贝而不是深拷贝,这意味着存储在原始List和克隆List中的对象是相同的,指向Java堆内存中相同的位置。增加了这个误解的原因之一是对于[不可变对象](https:/
Java初始化List的五种方法
#### 在Java中初始化`List`的五种方法 Java 中经常需要使用到 List,下面简单介绍几种常见的初始化方式。 **方案一、构造`List`后使用`List.add`初始化。** List<String> stringList = new LinkedList<>(); stringList.add("a"); s
Java泛型编程基础
Java Generics and Collections ----------------------------- * List< Integer > List< int > The type parameters must always be bound to reference type,not primitive types. * One
java 11 不可修改集合API
#### 不可修改集合API 自 Java 9 开始,Jdk 里面为集合(List/ Set/ Map)都添加了 of 和 copyOf 方法,它们两个都用来创建不可变的集合,来看下它们的使用和区别。 示例1: var list = List.of("Java", "Python", "C"); var copy = List.copy
java collection implode
With Java 8 you can do this without any third party library. If you want to join a Collection of Strings you can use the new String.join() method: List<String> list = Arrays.asLi
java中集合Collection转list对象
参考:[java中集合Collection转list对象](https://www.oschina.net/action/GoToLink?url=https%3A%2F%2Fblog.csdn.net%2Fqq_27908393%2Farticle%2Fdetails%2F82020704) 首先我的需求是获取到购物车列表,购物车列表是一个Map对象,构
How to switch java version on ubuntu 20.04
* View all java versions lwk@qwfys:~$ update-java-alternatives --list java-1.11.0-openjdk-amd64 1111 /usr/lib/jvm/java-1.11.0-openjdk-amd64 java-1.8.0-ope