List中的三种循环遍历及删除操作

1、for循环遍历list

 public static void main(String[] args) {
        List list = new ArrayList();
        list.add("asdf");
        list.add("我多想");
        list.add("我多想");
        list.add("一少年");
        list.add(1);

        System.out.println(list);
        for (int i = 0;i<list.size();i++)
        {
            System.out.println(list.get(i));

            //删除目标元素时,size-1,后续的元素位置前移,导致后续的元素位置改变。不能完整输出整个序列。
            //在测试中虽然得到正确的结果但是少扫描了元素,故新加测试例子,在list重复元素在一起遍历就会出现问题
            if(list.get(i).equals("我多想"))
            {
                list.remove(i);
            }
            System.out.println(">>>>>>>>"+list.size());
        }
        System.out.println(list);
 }

输出结果如下图:

 应该将 我多想 这个元素都删除掉,没成功,list中的元素前移导致没有将所有元素都遍历

结论:这种方式的问题在于,删除某个元素后,后面的元素数组元素下标向前挪一位,所以会导致你在遍历的时候漏掉删除元素的后一个元素。

2.foreach删除

 从源码中看出有个modCount计数器,在使用foreach遍历删除元素之前将当时的修改次数纪录到expectedModCount,删除元素后modCount++,导致抛出异常。

3.迭代器删除指定元素

代码如下

public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("name");
        list.add("哈哈");
        list.add("name");
        list.add("name");
        list.add("java");

        //目标删除指定元素name
        Iterator<String> it = list.iterator();
        while(it.hasNext()){
            String item = it.next();
            if (item.equals("name")){
                it.remove();
            }
        }
        System.out.println(list);
    }

 迭代器可以很好的删除指定元素

总结:for循环、foreach都不能用来删除指定元素,可以通过迭代器来删除指定的元素

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值