问一个简单的集合问题

仰望. 2013-10-09 01:39:33
本人新手,最近在使用ArrayList集合的时候出现了个问题,一直想不明白?请教各位大牛解释下!

	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(i); //删除所有
}

System.out.println("删除后"+list.size());
}

输出结果为:删除前10
删除后5
按正常思路集合的大小应该是0,为什么只删除一半,遍历的时候应该是全部删了,为什么还有5个元素,求解?
...全文
385 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
fuzeqiang 2013-10-10
  • 打赏
  • 举报
回复
知道调试吗?有问题,先调试。调不懂了再问。这个问题你如果调试了不可能不明白的。
qq_wwwhj 2013-10-10
  • 打赏
  • 举报
回复
非要一个一个的删除的话就从后往前删
m345592864 2013-10-10
  • 打赏
  • 举报
回复
按楼主的意思,代码改成这样就没问题了
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());
}
m345592864 2013-10-10
  • 打赏
  • 举报
回复
list的remove方法有两个的 list.remove(int index);根据下标remove list.remove(Object o);根据集合中的元素remove
  • 打赏
  • 举报
回复
list.clear();
shiyonghu 2013-10-09
  • 打赏
  • 举报
回复
for (int i = 0; i < list.size(); i++) {
			list.remove(i); // 删除所有
			System.out.println("第"+i+"次,长度为:"+list.size());
		}
打印这句话你就明白了。。
仰望. 2013-10-09
  • 打赏
  • 举报
回复
搞明白了,谢谢大家
lishikai500 2013-10-09
  • 打赏
  • 举报
回复
要从loop 里删除东西 要用 Iterator:

  for(Iterator<Integer> arrayIterator = list.iterator(); arrayIterator.hasNext();){
		    	arrayIterator.next();
		    	arrayIterator.remove();
		    }
逍遥jc 2013-10-09
  • 打赏
  • 举报
回复

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);        //删除所有
}
从最后一位开始删除就不会有这样的问题了。
O_森_O 2013-10-09
  • 打赏
  • 举报
回复
引用 11 楼 paomo120 的回复:
你可以用迭代器删除
更简单一点,直接
list.clear()
就好了,或者用i从大到小循环就可以避免上面的问题。
莼天 2013-10-09
  • 打赏
  • 举报
回复
你可以用迭代器删除
花木兰1闪21A 2013-10-09
  • 打赏
  • 举报
回复
for(int i=list.size()-1;i>=0;i--){ list.remove(i); }
lost_guy_in_scut 2013-10-09
  • 打赏
  • 举报
回复
引用 8 楼 qq931226110 的回复:
list删除一个长度就会减1,可以这样 System.out.println("删除前"+list.size()); int len=list.size(); for(int i=0;i<len;i++){ list.remove(i); //删除所有 } 这样就会删除所有了。
你确定?
qq931226110 2013-10-09
  • 打赏
  • 举报
回复
list删除一个长度就会减1,可以这样 System.out.println("删除前"+list.size()); int len=list.size(); for(int i=0;i<len;i++){ list.remove(i); //删除所有 } 这样就会删除所有了。
lost_guy_in_scut 2013-10-09
  • 打赏
  • 举报
回复
诚如三楼所说,如果想要删除所有元素,可以尝试如下操作: list.removeAll(list);
livend 2013-10-09
  • 打赏
  • 举报
回复
i在变大,list.size()在变小,10/2=5;
tony4geek 2013-10-09
  • 打赏
  • 举报
回复
list.size(); 这个会变化的。
whos2002110 2013-10-09
  • 打赏
  • 举报
回复
单步看每次循环分别删掉了什么值
绝对在乎妮 2013-10-09
  • 打赏
  • 举报
回复
 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个元素而已
安特矮油 2013-10-09
  • 打赏
  • 举报
回复
for(int i=0;i<list.size();i++){ list.remove(i); //删除所有 } 这里的问题,因为size虽然在变,但是你的i已经增加了,只删掉了0,2,4,6,8位置的数据
加载更多回复(1)

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧