欢迎使用CSDN-markdown编辑器

list循环删除指定元素

最近做一个项目,其中用到了删除重复对象的问题,自己找了些文章看了看,完美解决了这个问题。现将其总结下来。
JAVA中循环遍历list有三种方式for循环、增强for循环(也就是常说的foreach循环)、iterator遍历。
1:for循环便利

    public void test1(){
        List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("c");
        for(int i=0;i<list.size();i++){
            if(list.get(i).equals("a")){
                list.remove(i);
            }
        }
        System.out.println(list);
    }

运行结果:[a,a,a,b,c]
这种的问题在于,在删除了某个元素后,list的大小会发生变化,而索引也在变化,所以会导致你在遍历的时候漏掉一些元素。
比如当你删除第1个元素后,继续根据索引访问第2个元素时,因为删除的关系后面的元素都往前移动了一位,所以实际访问的是第3个元素。
因此,这种方式可以用在删除特定的一个元素时使用,但不适合循环删除多个元素时使用。

2:增强for循环

    public void test2(){
        List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("c");
        for(String str:list){
            if(str.equals("a")){
                list.remove(str);
            }
        }
        System.out.println(list);
    }

运行结果:Exception in thread “main” java.util.ConcurrentModificationException
可见是会抛出异常了,至于原因在http://blog.csdn.net/izard999/article/details/6708738中可以得到比较详细的解析。但是在删除后立刻break
则不会报错了。

3:迭代器

    public void test3(){
        List<String> list = new ArrayList<String>();
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("c");
        Iterator<String> iterator = list.iterator();
        while(iterator.hasNext()){
            String str = iterator.next();
            if(str.equals("a")){
                iterator.remove();
            }
        }
        System.out.println(list);
    }

运行结果:[b, c]
这种方式可以正常的循环及删除。但要注意的是,使用iterator的remove方法,如果用list的remove方法同样会报上面提到的异常。

4.用set集合:set集合不能拥有重复元素

 public void test4(){
        List<String> list = new ArrayList<String>();
        Set<String> set = new HashSet<String>();
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("a");
        list.add("b");
        list.add("c");
        for(String str:list){
            set.add(str);
        }
        System.out.println(set);
    }

运行结果:[a,b,c]

总结:如果是删除特定一个元素呢,可以用for循环和增强for循环。如果是删除多个元素呢,用迭代器。如果是去除重复元素,可以转为set集合,当然如果元素是对象,则需要重写equals及hsahcode方法

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值