返回顶部
首页 > 资讯 > 后端开发 > JAVA >List的remove()方法详解
  • 514
分享到

List的remove()方法详解

java 2023-09-10 09:09:32 514人浏览 安东尼
摘要

一、错误使用场景 1、普通for循环遍历List删除指定元素,list.remove(index) 示例:将姓张的名字移除掉 List nameList = new ArrayList(Arrays.asList("张三", "李四

一、错误使用场景

1、普通for循环遍历List删除指定元素,list.remove(index)

示例:将姓张的名字移除掉

List nameList = new ArrayList<>(Arrays.asList("张三", "李四", "王五", "赵六"));nameList.add("张七");nameList.add("张八");for (int i = 0; i < nameList.size(); i++) {     String name = nameList.get(i);     System.out.println("当前遍历对象==="+name);     if (name.startsWith("张")) {         nameList.remove(i);     }}System.out.println(nameList);

 输出结果:

【李四】【张八】遍历被跳过,【张八】没有被成功移除

原因分析:

List调用remove(index)方法后,会移除index位置上的元素,之后的所有元素依次前移,当移除完【张三】时,【李四】变成了数组的第一位,此时的索引应该要index-1才能获取到【李四】。所以每移除一个元素时就需要把index-1,否则原来索引为index+1的元素就无法遍历到。

2、foreach遍历List删除元素

示例:同上

List nameList = new ArrayList<>(Arrays.asList("张三", "李四", "王五", "赵六"));nameList.add("张七");nameList.add("张八");for (String name : nameList) {    System.out.println("当前遍历对象==="+name);    if (name.startsWith("张")) {        nameList.remove(name);    }}System.out.println(nameList);

输出结果:

原因分析:

foreach循环实际上是迭代,使用list.remove(item)方法后,list 对象的modCount值进行了修改,而 list对象的迭代器中的expectedModCount值没有修改,所以抛出了异常

3、直接使用list.remove(object)

示例: 将张三从数组中移除

List nameList = new ArrayList<>(Arrays.asList("张三", "李四", "王五", "赵六"));nameList.add("张三");nameList.add("张三");nameList.remove("张三");System.out.println(nameList);

输出结果:[李四, 王五, 赵六, 张三, 张三]

原因分析:

list.remove(object)的逻辑和list.remove(index)大致相同:元素依次遍历,数组中存在与入参对象相等的元素就移除,之后的所有元素依次前移,返回true,若不存在与入参相等的元素,返回false。

二、正确使用方法

1、 使用list.removeIf()方法

removeIf()的入参是一个过滤条件,用来判断需要移除的元素是否满足条件。

原理:方法中设置了一个removeSet,把满足条件的元素索引坐标都放入removeSet,然后统一对removeSet中的索引进行移除

示例:将姓张的名字移除掉

List nameList = new ArrayList<>(Arrays.asList("张三", "李四", "王五", "赵六"));nameList.add("张七");nameList.add("张八");nameList.removeIf(o->o.startsWith("张"));System.out.println(nameList);

输出结果:[李四, 王五, 赵六]

2、使用迭代器Iterator移除元素

迭代器是一个链表,直接使用remove操作不会出现问题

示例:同上

List nameList = new ArrayList<>(Arrays.asList("张三", "李四", "王五", "赵六"));nameList.add("张七");nameList.add("张八");Iterator iterator = nameList.iterator();while (iterator.hasNext()) {    if (iterator.next().startsWith("张")) {        iterator.remove();    }}System.out.println(nameList);

输出结果:[李四, 王五, 赵六]

3、使用list.removeAll()方法

定义一个需要移除的数组,for循环内将需要移除的元素收集在定义的数组中,for循环结束后直接removeAll()

示例:同上

List nameList = new ArrayList<>(Arrays.asList("张三", "李四", "王五", "赵六"));nameList.add("张七");nameList.add("张八");List removeList = new ArrayList<>();for (String name : nameList) {    if (name.startsWith("张")) {        removeList.add(name);    }}nameList.removeAll(removeList);System.out.println(nameList);

输出结果:[李四, 王五, 赵六]

4、倒序遍历元素然后删除

正序删除元素会移位那我们转变思维倒序遍历

示例:

List nameList = new ArrayList<>(Arrays.asList("张三", "李四", "王五", "赵六"));nameList.add("张七");nameList.add("张八");for (int i = nameList.size() - 1; i >= 0; i--) {    String name = nameList.get(i);    System.out.println("当前遍历对象===" + name);    if (name.startsWith("张")) {        nameList.remove(i);    }}System.out.println(nameList);

输出结果:

 三、总结

使用普通for循环删除元素时需要注意索引会变化的问题

list删除元素时建议使用迭代器Iterator或者removeIf()方法

来源地址:https://blog.csdn.net/anxin_hw/article/details/128312846

--结束END--

本文标题: List的remove()方法详解

本文链接: https://lsjlt.com/news/402173.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • List的remove()方法详解
    一、错误使用场景 1、普通for循环遍历List删除指定元素,list.remove(index) 示例:将姓张的名字移除掉 List nameList = new ArrayList(Arrays.asList("张三", "李四...
    99+
    2023-09-10
    java
  • Python List remove()实例用法详解
    描述 remove() 函数用于移除列表中某个值的第一个匹配项。 语法 remove()方法语法: list.remove(obj) 参数 obj -- 列表中要移除的对象。 返回值 该方法没有返回值但是会移除...
    99+
    2022-06-02
    Python List remove()
  • Java List的remove()方法踩坑
    目录1、普通for循环遍历List删除指定元素--错误!!!2、for循环遍历List删除元素时,让索引同步调整--正确!3、倒序遍历List删除元素--正确!4、foreach遍历...
    99+
    2024-04-02
  • 怎么解决Java List的remove()方法踩坑
    这篇文章主要讲解了“怎么解决Java List的remove()方法踩坑”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么解决Java List的remove()方法踩坑”吧!Java的Li...
    99+
    2023-06-25
  • Python List remove()的使用方法介绍
    这篇文章主要介绍“Python List remove()的使用方法介绍”,在日常操作中,相信很多人在Python List remove()的使用方法介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Pyt...
    99+
    2023-06-20
  • jQuery的remove()方法使用详解
    jQuery的remove()方法用于从DOM中移除元素。它可以同时删除元素及其所有子元素。下面是remove()方法的使用详解:基...
    99+
    2023-08-17
    jQuery
  • Java List的remove()方法陷阱以及性能优化
    Java List在进行remove()方法是通常容易踩坑,主要有一下几点 循环时:问题在于,删除某个元素后,因为删除元素后,后面的元素都往前移动了一位,而你的索引+1,所以实际访问...
    99+
    2024-04-02
  • python中list方法详解
    目录一、创建一个列表二、 访问列表中的元素三、append 方法:四、extend 方法:五、insert 方法:六、remove 方法:七、pop 方法:八、del方法:...
    99+
    2023-05-17
    python list方法 python list
  • Java List的remove()方法陷阱以及性能优化的方法教程
    这篇文章主要介绍“Java List的remove()方法陷阱以及性能优化的方法教程”,在日常操作中,相信很多人在Java List的remove()方法陷阱以及性能优化的方法教程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法...
    99+
    2023-06-25
  • python列表中remove()函数的使用方法详解
    目录1.基本使用2.删除普通类型元素3.删除对象类型元素4.一次只删一个元素5、Python列表的remove方法的注意事项总结1. 基本使用 remove() 函数可以删除列表中的...
    99+
    2024-04-02
  • Java List toArray(new String[0]) 的理解&List的toArray()方法详解
    Java List toArray(new String[0]) 的理解 ArrayList的toArray ArrayList提供了一个将List转为数组的一个非常方便的方法toArray。toAr...
    99+
    2023-10-22
    Java List 集合 toArray
  • Java实现List去重的方法详解
    目录简介直接去重根据对象属性去重法1:TreeSet 法2:stream+TreeSet所有代码简介 本文用示例介绍Java的List(ArrayList、LinkedLi...
    99+
    2024-04-02
  • VBS下Remove方法的用法
    这篇文章主要介绍“VBS下Remove方法的用法”,在日常操作中,相信很多人在VBS下Remove方法的用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”VBS下Remove方法的用法”的疑惑有所帮助!接下来...
    99+
    2023-06-08
  • 解析ConcurrentHashMap: get、remove方法分析
    目录1、get方法1.1 ForwardingNode 内部类(FWD结点)2、remove方法前面几篇文章分析了并发HashMap的put方法及其相关方法,transfer方法,那...
    99+
    2024-04-02
  • Java中List集合的常用方法详解
    目录1、void add(intindex, Eelement)2、boolean addAll(intindex, Collection< extends...
    99+
    2024-04-02
  • 详解Java中List的正确的删除方法
    目录简介实例正确方法法1:for的下标倒序遍历法2: list.stream().filter().collect()法3: iterator迭代器错误方法法1:for(xxx : ...
    99+
    2024-04-02
  • 详解java中List中set方法和add方法的区别
    目录前言相同点不同点总结前言 在Java中的常用的集合接口List中有两个非常相似的方法: E set(int index, E element); void add(int ind...
    99+
    2022-11-13
    java List中set和add区别 java set add区别
  • javaArrayList中的remove方法介绍
    先看一段代码,看看自定义的ArrayList中的remove设计是否有问题。 public class MyArrayList { private Object[] mDat...
    99+
    2024-04-02
  • Java实现List去重的五种方法详解
    目录通过HashSet去重(不保证顺序)通过HashSet去重(保证顺序)遍历后判断赋给另一个list集合去重(保证顺序)通过TreeSet去重(保证顺序)Java8中Stream流...
    99+
    2022-11-13
    Java List去重方法 Java List去重 Java去重 List 去重
  • Java 中的 Lambda List 转 Map 的多种方法详解
    目录故事背景公共代码方式一(partitioningBy 分两组)方式二(groupingBy 分多组)方式三(toMap 自定义<Key, Value>)故事背景 我们...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作