实际开发碰到List不能删除元素的情况,仔细测试总结了下,如果有不完整不完美的地方,欢迎大佬指正:
public class ListIsRemove {
public static void main(String[] args) {
List list = new ArrayList();
for(int i =0;i<10;i++){
list.add(i+1+"");
}
//第一种遍历方式
//元素个数<=2时,删除1不会报错,删除2会报错,元素个数大于2时,会直接报错。底层原理这里不讨论,只推荐靠谱的删除方式
/**
* Exception in thread “main” java.util.ConcurrentModificationException
at java.util.ArrayList
I
t
r
.
c
h
e
c
k
F
o
r
C
o
m
o
d
i
f
i
c
a
t
i
o
n
(
A
r
r
a
y
L
i
s
t
.
j
a
v
a
:
909
)
a
t
j
a
v
a
.
u
t
i
l
.
A
r
r
a
y
L
i
s
t
Itr.checkForComodification(ArrayList.java:909) at java.util.ArrayList
Itr.checkForComodification(ArrayList.java:909)atjava.util.ArrayListItr.next(ArrayList.java:859)
at com.wangyi.list.ListIsRemove.main(ListIsRemove.java:22)
/
/ for(String list1:list){
if(“1”.equals(list1) ){
list.remove(list1);
}
}
System.out.println(list);*/
//第二种遍历方式
//这种遍历方式有时候不能根据条件删除元素,会跳过某些元素,下边这种情况就不能删除list中的元素2
/* for (int j = 0; j < list.size(); j++) {
if("1".equals(list.get(j)) || "2".equals(list.get(j)) ){
list.remove(j);
//矫正方式:修正index,否则不会出现异常,但是会略过某些元素
// j=j-1;
}
}
System.out.println(list);*/
//第三种遍历方式,倒叙方式,暂且没有发现问题
/*for(int i=list.size()-1;i>=0;i--){
if("1".equals(list.get(i)) || "2".equals(list.get(i)) ) {
list.remove(i);
}
}
System.out.println(list); */
//第四种 迭代器方式移除,实战应用没有问题推荐使用,也是最接近底层的遍历方式,我认为。
Iterator it =list.iterator();
while(it.hasNext()){
String temp = (String) it.next();
if(temp.equals("1") || temp.equals("2")){
it.remove();
}
}
System.out.println(list);
}
}