问一个简单的集合问题 本人新手,最近在使用ArrayList集合的时候出现了个问题,一直想不明白?请教各位大牛解释下! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 删除元素的下标为0,你把0删除了之后,原来下标为1的元素变成了下标为0的元素,但是0已经遍历过了,下一个循环中进行删除的元素下标是1,而这个1在删除之前的ArrayList中它的下标是2……依此类推,剩下的相信你应该明白了 for(int i=0;i<list.size();i++){ list.remove(i); //删除所有 }这里的问题,因为size虽然在变,但是你的i已经增加了,只删掉了0,2,4,6,8位置的数据 for(int i=0;i<list.size();i++){ list.remove(i); //删除所有 }这里的list,当你remove一个元素的时候,list的size就会减1,当你remove掉5个元素的时候,list.size()为5,此时i也为5,i<list.size()为假,跳出此循环,这时候,list还有5个元素。所以你只remove其中5个元素而已 list.size(); 这个会变化的。 i在变大,list.size()在变小,10/2=5; 诚如三楼所说,如果想要删除所有元素,可以尝试如下操作:list.removeAll(list); list删除一个长度就会减1,可以这样System.out.println("删除前"+list.size()); int len=list.size(); for(int i=0;i<len;i++){ list.remove(i); //删除所有 }这样就会删除所有了。 for(int i=list.size()-1;i>=0;i--){list.remove(i);} 更简单一点,直接list.clear()就好了,或者用i从大到小循环就可以避免上面的问题。 for(int i=0;i<list.size();i++){list.remove(i); //删除所有}这是你写的,到最后list.size()是5了。i也是5了。故删除不了所有的元素。不妨这么写吧。for(int i=list.size();i>0;i--){list.remove(i); //删除所有}从最后一位开始删除就不会有这样的问题了。 要从loop 里删除东西 要用 Iterator: for(Iterator<Integer> arrayIterator = list.iterator(); arrayIterator.hasNext();){ arrayIterator.next(); arrayIterator.remove(); } for (int i = 0; i < list.size(); i++) { list.remove(i); // 删除所有 System.out.println("第"+i+"次,长度为:"+list.size()); }打印这句话你就明白了。。 list的remove方法有两个的list.remove(int index);根据下标removelist.remove(Object o);根据集合中的元素remove 按楼主的意思,代码改成这样就没问题了public void test(){ ArrayList<Integer> list=new ArrayList<Integer>(); for(int i=0;i<10;i++){ list.add(i); //向集合添加10个数 } System.out.println("删除前"+list.size()); for(int i=0;i<list.size();i++){ list.remove(Integer.value(i)); //remove其中的元素,而不是remove下标 } System.out.println("删除后"+list.size());} JTabbedPane tab上的小X用来关闭 怎么实现 web文件后缀的问题(icefaces facelets JSF) 50分求助,转换问题... 关于JTable的问题,为什么表头显示不出来呀!!急,谢谢 再问改变鼠标形状问题!! 谁会用SWING设计窗口 实现象ECLIPES一样的窗口拖放 100分 一个多线程操作数据库问题 求高手点拨:“我的错误的出现原因”和“解决方案”. ActionListener 接口 定义了哪几中方法 初学者的菜鸟问题:关于JB的,高手请进; 求助,Java与python有没有类似jni的框架 txt中自己敲入字符,程序就会报错
list.remove(i); //删除所有
}
这里的问题,因为size虽然在变,但是你的i已经增加了,只删掉了0,2,4,6,8位置的数据
list.remove(i); //删除所有
}这里的list,当你remove一个元素的时候,list的size就会减1,当你remove掉5个元素的时候,list.size()为5,此时i也为5,i<list.size()为假,跳出此循环,这时候,list还有5个元素。所以你只remove其中5个元素而已
list.removeAll(list);
System.out.println("删除前"+list.size());
int len=list.size();
for(int i=0;i<len;i++){
list.remove(i); //删除所有
}
这样就会删除所有了。
list.remove(i);
}
就好了,或者用i从大到小循环就可以避免上面的问题。
for(int i=0;i<list.size();i++){
list.remove(i); //删除所有
}这是你写的,到最后list.size()是5了。i也是5了。故删除不了所有的元素。不妨这么写吧。for(int i=list.size();i>0;i--){
list.remove(i); //删除所有
}从最后一位开始删除就不会有这样的问题了。
arrayIterator.next();
arrayIterator.remove();
}
list.remove(i); // 删除所有
System.out.println("第"+i+"次,长度为:"+list.size());
}
打印这句话你就明白了。。
list.remove(int index);根据下标remove
list.remove(Object o);根据集合中的元素remove
public void test(){
ArrayList<Integer> list=new ArrayList<Integer>();
for(int i=0;i<10;i++){
list.add(i); //向集合添加10个数
}
System.out.println("删除前"+list.size());
for(int i=0;i<list.size();i++){
list.remove(Integer.value(i)); //remove其中的元素,而不是remove下标
}
System.out.println("删除后"+list.size());
}