A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 孙百鑫 于 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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 神马都是浮云

查看全部评分

11 个回复

倒序浏览
个人觉得是因为代码中list.get(0)和后面的list.get(x)相比,比完之后,list.get(0)还在,所以就删除不成功,可以在第17行加入list.remove(0);
回复 使用道具 举报
是第19行添加list.remove(0);  刚才写错了
回复 使用道具 举报
camml 发表于 2013-6-28 13:38
个人觉得是因为代码中list.get(0)和后面的list.get(x)相比,比完之后,list.get(0)还在,所以就删除不成功 ...

我试了试,好像没成功。
回复 使用道具 举报
camml 发表于 2013-6-28 13:38
个人觉得是因为代码中list.get(0)和后面的list.get(x)相比,比完之后,list.get(0)还在,所以就删除不成功 ...

remover(0)就等于重复删除了吧
回复 使用道具 举报
研究了好会,找到问题了。。找到解决办法了,给x的值重新赋值为-1;如果还有更好的方法,或者其他,欢迎提出哦。。
回复 使用道具 举报
gzbbxu 中级黑马 2013-6-28 13:47:34
7#
  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:12
8#

嗯 我错了,为什么对x重新赋值为-1呢
回复 使用道具 举报
camml 中级黑马 2013-6-28 14:37:40
9#
只要改一下for循环就行了
for(int x=list.size()-1;x>=0;x--){
                  
                   if(list.get(x)=="abc"){
                           list.remove(x);
                    
                   }
                    }

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
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)就没有删除。
希望能我的解释你能明白。对你有帮助!

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
因为在数组列表中的元素被删除后,其size属性的值也发生了变化,本来这个位置上的元素被移除了,所以不能成功删除

评分

参与人数 1技术分 +1 收起 理由
孙百鑫 + 1 赞一个!

查看全部评分

回复 使用道具 举报
问题解决了。我把主题改成已解决了{:soso_e100:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马