今天写代码时,需要删除一个列表中的某个元素,于是就用了一个循环,一边遍历一边删除,一个同事在review我的代码时告诉我,不能这样写,会出问题。
for(int i = 0; i < list.size(); i++){
if(list.get(i).icon_name.equals("shape8"){
list.remove(i);
}
}
于是,Google了一下,原来这种遍历有可能会遗漏某个元素,因为删除元素后List的size在变化,元素的索引也在变化,比如你循环到第2个元素的时候你把它删了,接下来你去访问第3个元素,实际上访问到的是原先的第4个元素。
Iterator<ShapeEntity> iterator = list.iterator();
while(iterator.hasNext()){
ShapeEntity shapeEntity = iterator.next();
if(shapeEntity.icon_name.equals("shape8")){
iterator.remove();
}
}
这时候,我们可以使用Iterator的方式也可以顺利删除和遍历。