java中List元素移除元素的那些坑(下)

简介: 本文主要介绍,java中list集合移除元素的那些坑,今天小编就和大家一起来了解一下吧!

二、解决办法


2.1、采用倒序移除

public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  list.add("11");
  list.add("11");
  list.add("12");
  list.add("13");
  list.add("14");
  list.add("15");
  list.add("16");
  System.out.println("原始list元素:"+ list.toString());
  CopyOnWriteArrayList<String> copyList = new CopyOnWriteArrayList<>(list);
  //通过下表移除等于11的元素
  for (int i = list.size() - 1; i >= 0; i--) {
    String item = list.get(i);
    if("11".equals(item)) {
      list.remove(i);
    }
  }
  System.out.println("通过下表移除后的list元素:"+ list.toString());
  //通过对象移除等于11的元素
  for (int i = copyList.size() - 1; i >= 0; i--) {
    String item = copyList.get(i);
    if("11".equals(item)) {
      copyList.remove(item);
    }
  }
  System.out.println("通过对象移除后的list元素:"+ list.toString());
}

输出结果:

原始list元素:[11, 11, 12, 13, 14, 15, 16]
通过下表移除后的list元素:[12, 13, 14, 15, 16]
通过对象移除后的list元素:[12, 13, 14, 15, 16]

2.2、fore的解决办法

public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  list.add("11");
  list.add("11");
  list.add("12");
  list.add("13");
  list.add("14");
  list.add("15");
  list.add("16");
  System.out.println("原始list元素:"+ list.toString());
  CopyOnWriteArrayList<String> copyList = new CopyOnWriteArrayList<>(list);
  //通过对象移除等于11的元素
  for (String item : copyList) {
    if("11".equals(item)) {
      copyList.remove(item);
    }
  }
  System.out.println("通过对象移除后的list元素:"+ copyList.toString());
}

输出结果:

原始list元素:[11, 11, 12, 13, 14, 15, 16]
通过对象移除后的list元素:[12, 13, 14, 15, 16]

2.3、使用迭代器移除

public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  list.add("11");
  list.add("11");
  list.add("12");
  list.add("13");
  list.add("14");
  list.add("15");
  list.add("16");
  System.out.println("原始list元素:"+ list.toString());
  //通过迭代器移除等于11的元素
  Iterator<String> iterator = list.iterator();
  while(iterator.hasNext()) {
    String item = iterator.next();
    if("11".equals(item)) {
      iterator.remove();
    }
  }
  System.out.println("通过迭代器移除后的list元素:"+ list.toString());
}

输出结果:

原始list元素:[11, 11, 12, 13, 14, 15, 16]
通过迭代器移除后的list元素:[12, 13, 14, 15, 16

2.4、jdk1.8的写法

public static void main(String[] args) {
  List<String> list = new ArrayList<String>();
  list.add("11");
  list.add("11");
  list.add("12");
  list.add("13");
  list.add("14");
  list.add("15");
  list.add("16");
  System.out.println("原始list元素:"+ list.toString());
  //jdk1.8移除等于11的元素
  list.removeIf(item -> "11".equals(item));
  System.out.println("移除后的list元素:"+ list.toString());
}

输出结果:

原始list元素:[11, 11, 12, 13, 14, 15, 16]
通过迭代器移除后的list元素:[12, 13, 14, 15, 16]

是不是好简单,哈哈!


三、总结


如果开发中需要在集合中移除某个元素,如果jdk是1.8的,建议直接使用2.4方法,如果是低版本,那么建议采用迭代器方法,效率高,性能好!


相关文章
|
21小时前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
7 0
|
21小时前
|
存储 安全 Java
【JAVA基础篇教学】第八篇:Java中List详解说明
【JAVA基础篇教学】第八篇:Java中List详解说明
|
21小时前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
21小时前
|
XML 前端开发 Oracle
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
14 2
|
21小时前
|
安全 Java
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException
循环的时候去删除集合中的元素 java.util.ConcurrentModificationException
|
21小时前
|
Java
java Map删除值为null的元素
java Map删除值为null的元素
|
21小时前
|
Java API
【亮剑】三种有效的方法来删除List中的重复元素Java的List
【4月更文挑战第30天】本文介绍了三种Java中删除List重复元素的方法:1) 使用HashSet,借助其不允许重复值的特性;2) 利用Java 8 Stream API的distinct()方法;3) 对自定义对象重写equals()和hashCode()。每种方法都附带了代码示例,帮助理解和应用。
|
21小时前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
21小时前
|
Java
Java中拷贝list数组如何实现
Java中拷贝list数组如何实现
11 0
|
21小时前
|
存储 Java API
java集合Collection(List)和泛型
java集合Collection(List)和泛型