对List及类似于线性表的元素 删除的顺序的考虑

来源:互联网 发布:冰川网络中签号 编辑:程序博客网 时间:2024/05/03 00:26


 

对于Colloection, 我一般需要用 for 循环,比如

for(int i=0, sz = list.size(); i< sz; i++){
 System.out.println(list.get(i));
}

同样,删除时,也按照上面的写法
Object obj=..;
for(int i=0, sz = list.size(); i< sz; i++){
 if(obj == list.get(i)){
   list.remove(i);
 }
}

有兴趣的朋友可以补充完,运行一下,看看会出现什么情况

如果你运行了的话,一定会报错,即使不报错,也不会得到你样到的结果,究其原因,在于list.remove(i)上,
一个列表,删除了前面的元素,这样,i的位置上的元素就变化了(应该是原来的i+1位置上的元素),但是 i++继续前行,就跳过了原来 i+1位置上的元素,大家可以画下图了解一下,所以可以这样解决
Object obj=..;
for(int i=0, sz = list.size(); i< sz; i++){
 if(obj == list.get(i)){
   list.remove(i);
   i--;//使下个位置仍是 原来 i+1位置上的元素
 }
}

还有一种方法,
Object obj=..;
for(int i= list.size() -1; i >=0; i--){
 if(obj == list.get(i)){
   list.remove(i);
 }
}
这样也可以得到想要的结果,至于为什么?大家想想线性表的应该就会明白

 

//谢谢竹子,不过我评论不了自己的博客,郁闷