撸代码时,会遇到这样一种情况,在ArrayList中循环删除元素,这里有坑!!!切记
为此,写了个测试,三种方式遍历,孰优孰劣一目了然:
首先新建数组并填充:
//新建数组并填充
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(4);
list.add(5);
list.add(6);
list.add(8);
//[1,2,4,5,6,8]
1>普通for循环删除元素(普通for循环删除list数组元素,满足条件的相邻元素会出现漏删情况)
for(int i=0;i<list.size();i++) {
if(list.get(i)%2 == 0) {
list.remove(i);
}
}
//实际输出结果:[1, 4, 5, 8]
//预测输出结果:[1,5]
System.out.println(list);
2>增强for循环删除元素(会抛异常)
for(Integer i:list) {
if(list.get(i) %2 == 0) {
list.remove(i);
//break;
}
}
//会抛异常java.util.ConcurrentModificationException
System.out.println(list);
3>iterater遍历(优秀)
Iterator<Integer> iterator = list.iterator();
while (iterator.hasNext()) {
if(iterator.next() %2 == 0) {
//注意不要用list.remove()方法,否则会抛异常
iterator.remove();
}
}
//实际输出结果:[1,5]
//预测输出结果:[1,5]
System.out.println(list);//---------------------------------------------推荐