首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

为何 这样移除不掉list里的数据

2012-06-20 
为什么 这样移除不掉list里的数据Java codepublic static void main(String[] args) {ListString l ne

为什么 这样移除不掉list里的数据

Java code
public static void main(String[] args) {        List<String> l = new ArrayList<String>();        l.add("11111");        l.add("22222");                for(String a : l){            l.remove(a);        }                for(int i=0;i<l.size();i++){            l.remove(l.get(i));        }                for(int i=0;i<l.size();i++){            l.remove(i);        }        System.out.println(l.size());}


这样一个简单的代码 想必大家都知道。
申明一个list 增加2个数据。

中间提供了三种移除方案(运行时 任意选一种)。

最后输出的都是1 而不是0.

我怎么做 才能一个一个移除数据呢;

[解决办法]
遍历删除会产生一个问题
删除动作作用时,会同时改变list内部的index

的确需要遍历删除的情况下,要这么做:
Java code
        List<String> l = new ArrayList<String>();        l.add("11111");        l.add("22222");        for(Iterator<String> it = l.iterator();it.hasNext();){            it.next();            it.remove();        }                System.out.println(l);
[解决办法]
List<String> l = new ArrayList<String>();
l.add("11111");
l.add("22222");
while(l.iterator().hasNext()) {
l.remove(l.get(0));
}
System.out.println(l.size());
[解决办法]
Java code
public static void main(String[] args) {        List<String> l = new ArrayList<String>();        l.add("11111");        l.add("22222");        while(l.size()>0){        l.remove(l.size()-1)        }        System.out.println(l.size());}
[解决办法]
for循环中利用递减方式!!!(int i=l.size();i>=0;i--)......
[解决办法]
Java code
package com.zf.test;import java.util.ArrayList;import java.util.Iterator;import java.util.List;public class Test5 {    public static void main(String[] args) {        List<String> l = new ArrayList<String>();        l.add("11111");        l.add("22222");        //单独用下面三个中的某一个方法肯定是都不行的。        //(1) 这里foreach循环,其实就相当于是Iterator在迭代集合对象 ,        //    Iterator在迭代对象的时候是不允许被迭代的对象修改或Remove的,除非用Iterator自己的remove()方法        for(String a : l){                l.remove(a);        }        //改成下面这样是可以的。        Iterator<String> it = l.iterator();        while(it.hasNext()){            it.next();            it.remove();        }        //(2) 你可以试想一下 , 刚开始的时候l.size() = 2 , i = 0         // 当执行完第一次循环  就移除了一个对象  此时 , l.size() == 1 , i = 1        // 此时  i< l.size() 不成立 , 就不会继续循环了。        for(int i=0;i<l.size();i++){                 l.remove(l.get(i));                    }        // 同上        for(int i=0;i<l.size();i++){            l.remove(i);        }        System.out.println(l.size());    }}
[解决办法]
当你删除了第一个对象后,list内部更新了index,这时list.size=1,而i==1 跳出循环,所以不能完全删除
[解决办法]
其实你已经删除了一个了,size为1 不是2 说明已经删除了一个而已,其它的楼上说的很清楚了
[解决办法]
for(int i=0;i<l.size();i++){
l.remove(i);
}
当i=0时删除了一个,当i=1时size()=1, 循环退出了
for(int i=0;i<l.size();i++){
l.remove(l.get(i));
}
一个道理


------解决方案--------------------


打印结果是0 ,如上面所说的,每个for只remove了一个element,第三个for不起作用

热点排行