java中List数组遍历删除

Kent_Sun 等级 406 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)
收藏
评论区

相关推荐

1 手写ArrayList核心源码
手写ArrayList核心源码 ArrayList是Java中常用的数据结构,不光有ArrayList,还有LinkedList,HashMap,LinkedHashMap,HashSet,Queue,PriorityQueue等等,我们将手写这些常用的数据结构的核心源码,用尽量少的代码来揭示核心原理。 下面我们来手写ArrayList的核心源码 首先
List集合
Java的List集合 一、ArrayList 1.插入 java / 在元素序列尾部插入 / public boolean add(E e) { // 1. 检测是否需要扩容 ensureCapacityInternal(size 1); // Increments modCount // 2. 将新元素插入序列尾
Linux下安装jdk
一 、安装前 java 1.查看是否已安装JDK yum list installed |grep java 2.卸载CentOS系统Java环境 yum y remove java1.8.0openjdk 表示卸载所有openjdk相关文件输入 yum y remove tzdatajava.noarch 卸载t
统计字符串中字符出现的次数(Python版)
字符串转list python s 'aabbccd' list1 list(s) 方法一: python list1 'a', 'a', 'b', 'c', 'c', 'c', 'c' dict_cnt {} for value in list1: dict_cntvalue dict_cnt.get(value,
Python中的基本list操作
List是python中的基本数据结构之一,和Java中的ArrayList有些类似,支持动态的元素的增加。list还支持不同类型的元素在一个列表中,List is an Object。 最基本的创建一个列表的方法 myList \'a','b','c'\ 在python中list也是对象,所以他也有方法和属性,在ptython解释器中 使用h
说说ArrayList的扩容机制
ArrayList是List接口的实现类,它是支持根据需要而动态增长的数组。java中标准数组是定长的,在数组被创建之后,它们不能被加长或缩短。这就意味着在创建数组时需要知道数组的所需长度,但有时我们需要动态程序中获取数组长度。ArrayList就是为此而生的,但是它不是线程安全的,外ArrayList按照插入的顺序来存放数据 ①ArrayList扩容发生
list集合的一些处理
做了一个消消乐类似的小游戏,其中需要打乱部分内容,用的list打乱的方式,特此笔记 Collections.sort(list); // 顺序排列 System.out.println(list); Collections.shuffle(list); // 混乱的意思 System.out.println(list);
死磕Java泛型(一篇就够)
Java泛型,算是一个比较容易产生误解的知识点,因为Java的泛型基于擦除实现,在使用Java泛型时,往往会受到泛型实现机制的限制,如果不能深入全面的掌握泛型知识,就不能较好的驾驭使用泛型,同时在阅读开源项目时也会处处碰壁,这一篇就带大家全面深入的死磕Java泛型。 泛型擦除初探相信泛型大家都使用过,所以一些基础的知识点就不废话了,以免显得啰嗦。
java中List数组遍历删除
List数组遍历删除 环境 jdk8 junit 单元测试 正解java// 正解1, jdk自带的addAll方法 @Test public void test18() { String strs {"12","34","56","78","90"}; List<String list Ar
go语言坑之list删除所有元素
go提供了一个list包 类似python的list,可以存储任意类型的数据,并提供了相应的API,如下:type Element func (e Element) Next() Element func (e Element) Prev() Elementtype List func New() List func (l List)
Java集合之综合论述
1.Java集合 1.1 集合应用场景1. 无法预测存储数据的数量的情况下,2. 同时存储一对一关系的数据3. 需要进行数据的增删4. 数据重复问题 1.2 集合框架的体系结构 集合框架分为两类,一是Collection,用于存储类的对象。二是Map,以键值对的形式存储信息。 Collection主要有三个子接口,List(序列),Queue(队列
我丢,去面试初级Java开发岗位,被问到泛型?
1、泛型的基础概念 1.1 为什么需要泛型 c List list new ArrayList();//默认类型是Object list.add("A123"); list.add("B234"); list.add("C345"); System.out.println(list);
list assignment index out of range
分析:list assignment index out of range:列表超过限制一种情况是:list[index]index超出范围另一种情况是:list是一个空的,没有一个元素,进行list[0]就会出现错误!
「JDK——ArrayList源码」超强解析,图文详解
ArrayList源码解析 简介ArrayList是Java集合框架中非常常用的一种数据结构。继承自AbstractList,实现了List接口。底层基于数组来实现动态容量大小的控制,允许null值的存在。同时还实现了RandomAccess、Cloneable、Serializable接口,支持快速访问、复制、序列化操作。 了解数组数组简单来说就是将所有的
盘点Python列表生成式的三种方法
一、前言列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。 二、案例分析 三种方法要生成list \[1, 2, 3, 4, 5, 6, 7, 8, 9, 10\]可以用list(range(1, 11))。print(list(range(1, 11))) 如果要生成\[1x1, 2x2