黑马程序员技术交流社区

标题: 集合删除的问题、、为什么删除不成功呢?总是 [打印本页]

作者: gzbbxu    时间: 2013-6-28 13:28
标题: 集合删除的问题、、为什么删除不成功呢?总是
本帖最后由 孙百鑫 于 2013-6-30 10:13 编辑
  1. import java.util.ArrayList;


  2. public class Test8 {
  3.    public static void main(String[] args) {
  4.            ArrayList list=new ArrayList();
  5.            list.add("abc");
  6.            list.add("abc");
  7.            list.add("abc");
  8.            list.add("adb");
  9.            System.out.println(list.size());
  10.            
  11.            for(int x=0;x<list.size();x++){
  12.                    String str=(String)list.get(x);
  13.                    if(str.equals("abc")){
  14.                            list.remove(x);
  15.                           
  16.                    }
  17.                   
  18.            }
  19.            System.out.println(list);
  20.            System.out.println(list.size());
  21.    }
  22. }
复制代码

作者: camml    时间: 2013-6-28 13:38
个人觉得是因为代码中list.get(0)和后面的list.get(x)相比,比完之后,list.get(0)还在,所以就删除不成功,可以在第17行加入list.remove(0);
作者: camml    时间: 2013-6-28 13:39
是第19行添加list.remove(0);  刚才写错了
作者: gzbbxu    时间: 2013-6-28 13:40
camml 发表于 2013-6-28 13:38
个人觉得是因为代码中list.get(0)和后面的list.get(x)相比,比完之后,list.get(0)还在,所以就删除不成功 ...

我试了试,好像没成功。
作者: gzbbxu    时间: 2013-6-28 13:42
camml 发表于 2013-6-28 13:38
个人觉得是因为代码中list.get(0)和后面的list.get(x)相比,比完之后,list.get(0)还在,所以就删除不成功 ...

remover(0)就等于重复删除了吧
作者: gzbbxu    时间: 2013-6-28 13:47
研究了好会,找到问题了。。找到解决办法了,给x的值重新赋值为-1;如果还有更好的方法,或者其他,欢迎提出哦。。

作者: gzbbxu    时间: 2013-6-28 13:47
  1. import java.util.ArrayList;

  2. public class Test8 {
  3.         public static void main(String[] args) {
  4.                 ArrayList list = new ArrayList();
  5.                 //list.add("abc");
  6.                 list.add("adb");
  7.                 list.add("abc");
  8.                 list.add("abc");
  9.                 list.add("adb");
  10.                 list.add("abc");
  11.                 System.out.println(list.size());
  12.                 //int size = list.size();
  13.                 for (int x = 0; x < list.size(); x++) {
  14.                         String str = (String)list.get(x);
  15.                         if (str.equals("abc")) {
  16.                                 list.remove(x);
  17.                            // list.remove(0);
  18.                             System.out.println("--还剩下"+list.size()+".."+x);
  19.                             x=-1;
  20.                         }
  21.                 }
  22.                 System.out.println(list);
  23.                 System.out.println(list.size());
  24.         }
  25. }
复制代码

作者: camml    时间: 2013-6-28 14:12
gzbbxu 发表于 2013-6-28 13:47

嗯 我错了,为什么对x重新赋值为-1呢
作者: camml    时间: 2013-6-28 14:37
只要改一下for循环就行了
for(int x=list.size()-1;x>=0;x--){
                  
                   if(list.get(x)=="abc"){
                           list.remove(x);
                    
                   }
                    }
作者: 杨增坤    时间: 2013-6-28 14:45
public static void main(String[] args) {
    ArrayList list=new ArrayList();
        list.add("abc-0");
         list.add("abc-1");
         list.add("abc-2");
       list.add("adb-3");
         System.out.println("刪除前集合的长度"+list.size());
        for(int x=0;x<list.size();x++){
                String str=(String)list.get(x);
              if(str.startsWith("abc")){
                 list.remove(x);
            }
        }
       System.out.println("集合元素"+list);
       System.out.println("删除后集合的长度:"+list.size());
      
   }结果:
刪除前集合的长度4
集合元素[abc-1, adb-3]
删除后集合的长度:2
解释:就是当你把集合中的元素删除后,集合会重新排列,就是把没有删除前的第二个元素(索引是1)移动到了现在的第一个位置(索引是0),
但是此时现在的第x=0,下次就是1了,所以现在的第一个元素(索引是0),就是删除前的第二个元素(索引是1)就没有删除。
希望能我的解释你能明白。对你有帮助!

作者: 秩宇    时间: 2013-6-28 15:04
因为在数组列表中的元素被删除后,其size属性的值也发生了变化,本来这个位置上的元素被移除了,所以不能成功删除
作者: 孙百鑫    时间: 2013-6-30 10:13
问题解决了。我把主题改成已解决了{:soso_e100:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2