今天在写代码时要删除List中的多个元素时犯了一个很搞笑的错误,等效的就是以下代码
public static void main(String[] args) {
List<String> a = new ArrayList<String>();
a.add("1");
a.add("2");
a.add("3");
a.add("4");
a.add("5");
Iterator<String> iterator = a.iterator();
while(iterator.hasNext()){
if("1".equals(iterator.next()) || "2".equals(iterator.next()))
iterator.remove();
}
}
运行后发现只能删除“1”这个元素,“2”删除不掉,后来才发现判断的时候如果第一个条件不满足,iterator.next()这个方法又会执行一遍,相当于已经不再是当前的元素了,当时写的还特别顺溜。。。
应该改成下面 这样
while(iterator.hasNext()){
String str = iterator.next();
if("1".equals(str) || "2".equals(str))
iterator.remove();
}
把当前指向的元素单独提出来放在条件判断里面,平时在写普通循环的时候写习惯了,没有把循环中的元素提出来。
记录一下