在进行实验二过程中,涉及到在一个ArrayList中进行元素的删除。从最直观的角度来看,此处可以这样写。
for(i = 0; i < list.size(); i++) {
list.remove(i);
}
从直观角度看来,这种删除方法没有问题,但是在以如下例子进行试验后发现出现问题。
public class test {
public static void main(String args[]) {
ArrayList<String> list = new ArrayList<String>();
int i;
list.add("111");
list.add("222");
list.add("333");
list.add("444");
list.add("555");
for(i=0; i < list.size(); i++) {
list.remove(i);
}
for(i=0; i < list.size(); i++) {
System.out.println(list.get(i) );
}
}
}
从字面意思看来,这段代码将所有的list中元素全部删除,但是实际运行后得到结果如下。
其中元素并没有被完全删除,从而说明了这种删除方法并不合理。
实际上在进行删除操作的时候,由于删除后删除位会前移,导致访问的编号错位,在进行删除操作的时候会导致不能删掉想删除的元素。
正确处理方式是使用迭代器删除
public class test {
public static void main(String args[]) {
ArrayList<String> list = new ArrayList<String>();
Itorator it = list.itorator();
list.add("111");
list.add("222");
list.add("333");
list.add("444");
list.add("555");
while(it.hasnext()){
it.next();
it.remove();
}
}
}
使用迭代器遍历并删除才能正确实现删除元素。