详解Java中List的正确的删除方法
简介
本文介绍Java的List的正确的删除方法。
实例
需求:有如下初始数据,将list中的所有数据为"b"的元素删除掉。即:填充removeB()方法
package com.example.a;
import java.util.ArrayList;
import java.util.List;
public class Demo {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("b");
list.add("c");
list.add("d");
removeB(list);
}
private static void removeB(List<String> list) {
// 待填充
}
}
正确方法
法1:for的下标倒序遍历
private static void removeB(List<String> list) {
for (int i = list.size() - 1; i >= 0; i--) {
if ("b".equals(list.get(i))) {
list.remove(i);
}
}
System.out.println(list);
}
结果
[a, c, d]
法2: list.stream().filter().collect()
private static void removeB(List<String> list) {
List<String> newList = list.stream()
.filter(e -> !"b".equals(e))
.collect(Collectors.toList());
System.out.println(newList);
}
结果
[a, c, d]
法3: iterator迭代器
private static void removeB(List<String> list) {
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
if ("b".equals(s)) {
it.remove();
}
}
System.out.println(list);
}
结果
[a, c, d]
错误方法
法1:for(xxx : yyy)遍历
private static void removeB(List<String> list) {
for (String s : list) {
if ("b".equals(s)) {
list.remove(s);
}
}
System.out.println(list);
}
结果(报异常)
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:909)
at java.util.ArrayList$Itr.next(ArrayList.java:859)
at com.example.a.Demo.removeB(Demo.java:18)
at com.example.a.Demo.main(Demo.java:14)
法2:for的下标正序遍历
private static void removeB(List<String> list) {
for (int i = 0; i < list.size(); i++) {
if ("b".equals(list.get(i))) {
list.remove(list.get(i));
}
}
System.out.println(list);
}
结果(有的没有删除掉)
[a, b, c, d]
原因分析
需求:通过遍历把list集合的所有数据删除掉。
package com.example.a;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
public class Demo {
private static List<String> list = new ArrayList<>();
public static void main(String[] args) {
reset();
// method1();
// method2();
// method3();
// method4();
}
private static void reset(){
list.clear();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
}
public static void method1() {
for (int i = 0; i< list.size(); i++) {
list.remove(i);
}
System.out.println(list);
}
public static void method2() {
for (int i = 0; i< list.size(); i++) {
list.remove(0);
}
System.out.println(list);
}
public static void method3() {
int len = list.size();
for (int i = 0; i < len; i++) {
list.remove(i);
}
System.out.println(list);
}
public static void method4() {
int len = list.size(); // 保证只获取一次长度
for (int i = 0; i< len; i++) {
list.remove(0);
}
System.out.println(list);
}
}
以上就是详解Java中List的正确的删除方法的详细内容,更多关于Java List删除方法的资料请关注其它相关文章!
相关文章