概述
文章目录
一,ArrayList遍历删除问题1.foreach遍历删除,抛异常2.for正序遍历,会无法删除满足条件的元素3.Iterator迭代器(解决办法一)4.for倒序遍历删除(推荐解决办法二)
二,Java遍历使用场景及优化
一,ArrayList遍历删除问题
1.foreach遍历删除,抛异常
ArrayList list = new ArrayList<>();
//init测试数据
for (int i = 1; i <= 5; i++) {
list.add(String.valueOf(i));
}
//foreach遍历删除
for (String str : list) {
if ("1".equals(str)) {
list.remove(str);
}
}
//抛出异常
Exception in thread "main" java.util.ConcurrentModificationException
at java.util.ArrayList$Itr.checkForComodification(Unknown Source)
at java.util.ArrayList$Itr.next(Unknown Source)
at test.Test.main(Test.java:54)
2.for正序遍历,会无法删除满足条件的元素
//for正序遍历删除
String[] delStrs = { "3", "4", "5" };
for (int i = 0; i < list.size(); i++) {
if (delStrs[0].equals(list.get(i))) {
list.remove(i);
}
else if(delStrs[1].equals(list.get(i))) {
list.remove(i);
}
else if(delStrs[2].equals(list.get(i))) {
list.remove(i);
}
}
//删除后:[1, 2, 4]
System.out.println(list.toString());
//删除后,未能成功删除指定的元素
//ArrayList删除一个元素自然没有问题,删除多个元素时,前面删除了后面的元素向前移动,下标发生了改变
System.out.println(list.toString());
3.Iterator迭代器(解决办法一)
//使用迭代器删除
Iterator iterator = list.iterator();
while(iterator.hasNext()) {
String string = iterator.next();
if ("3".equals(string)) {
//注意:只能通过迭代器来删除,不能直接在list上删除,否则迭代器会抛出异常。
iterator.remove();
//list.remove(string);//抛出异常
}
else if ("4".equals(string)) {
iterator.remove();
}
else if ("5".equals(string)) {
iterator.remove();
}
}
//删除后:[1, 2]
System.out.println(list.toString());
4.for倒序遍历删除(推荐解决办法二)
使用倒序遍历,元素向前移动是不会影响arraylist前面的元素排列
//for倒序遍历删除
for (int i = list.size()-1; i >= 0; i--) {
String string = list.get(i);
if ("3".equals(string)) {
list.remove(i);
}
else if ("4".equals(string)) {
list.remove(i);
}
else if ("5".equals(string)) {
list.remove(i);
}
}
//删除后:[1, 2]
System.out.println(list.toString());
二,Java遍历使用场景及优化
1.ArrayList是通过动态数组来实现的,支持随机访问,所以get(index)快。 ArrayList,用三种方式遍历的速度是 for > Iterator > foreach ArrayList用三种遍历方式效率差不多,一般都会用for或者foreach,因为Iterator写法相对复杂一些。 2:LinkedList的话用for遍历的效率远远落后于foreach和Iterator,Iterator > foreach > for 推荐使用foreach或者Iterator。
最后
以上就是生动期待为你收集整理的java list 遍历并删除_Java ArrayList遍历删除问题的全部内容,希望文章能够帮你解决java list 遍历并删除_Java ArrayList遍历删除问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复