前几天做实验的时候用到了ArrayList,本来刚开始学java会的就不多,用for each循环来进行remove,结果出大问题,直接报错。下面就分析一下该如何remove。
一、出错原因
众所周知,ArrayList中是有remove功能的,你就删除一个直接用ArrayList的remove啥问题都没有,关键在于你循环了。假如我想remove掉ArrayList中的三个元素:A\B\C。第一次循环删除索引为0的A,但是,删除后ArrayList会自动改变索引,也就是B的索引变成0,C的索引变成1,等你循环到第二次删除索引为1的值时删除的其实是C,所以很尴尬B没有删掉。后续代码全跟着错误,自然就报错了。
二、解决方法
那么遇到循环怎么办呢,用迭代器,用迭代器,用迭代器。调用迭代器进行删除就可以了,千万别再傻傻的for each。注意,这个迭代器不是你自己写的,而是系统自带的。最后是一个迭代器循环remove的例子。
Iterator<L> iterator1 = vertices.iterator();
boolean flag = false;
while (iterator1.hasNext()) {
L string = iterator1.next();
if (string.equals(vertex)) {
flag = true;
iterator1.remove();
break;
}
}