当前位置:编程学习 > JAVA >>

问一个简单的集合问题

    本人新手,最近在使用ArrayList集合的时候出现了个问题,一直想不明白?请教各位大牛解释下! --------------------编程问答-------------------- 删除元素的下标为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);        //删除所有
    }
这样就会删除所有了。 --------------------编程问答--------------------
引用 8 楼 qq931226110 的回复:
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);
} --------------------编程问答-------------------- 你可以用迭代器删除 --------------------编程问答--------------------
引用 11 楼 paomo120 的回复:
你可以用迭代器删除

更简单一点,直接
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.clear(); --------------------编程问答-------------------- list的remove方法有两个的
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());
}


补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,