常用循环遍历简述及应用

目录

1.各种循环遍历方法简述

1.1. 普通for循环

1.2. 增强for循环

1.3. forEach循环

1.4. 迭代器循环

2. 应用对象

3. 应用场景避坑

3.1 遍历集合的同时有remove逻辑

3.1.1常用推荐

3.2 遍历map集合时,操作外部list集合


1.各种循环遍历方法简述

1.1. 普通for循环

结构及举例:for(初始条件;终止条件;步进表达式){ 操作 }

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

特点:根据下标索引进行遍历,有利于定位到在指定索引的元素,方便修改元素的值,灵活控制。

1.2. 增强for循环

结构及举例:for(数据类型  变量名 : 集合){ 操作 }

        for (User user : userList) {
            System.out.println(user.getId());
        }

特点:

1.3. forEach循环

结构及举例:集合 . forEach(变量名 -> {操作});

userList.forEach(user -> System.out.println(user.getId()));

特点:forEach循环是Java8引入的;结构上是增强for循环+Lambda表达式,代码看上去更简洁;

1.4. 迭代器循环

结构及举例:

        Iterator<User> iterator = userList.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next().getId());
        }

特点:

2. 应用对象

数组遍历:普通for遍历、增强for、while和do while,常用:普通for和增强for;

list集合遍历:四种都可用,常用:增强for和forEach;

map集合遍历:forEach循环、迭代器循环,常用:forEach;

3. 应用场景避坑

3.1 循环遍历的同时有remove操作

3.1.1常用推荐

  • 迭代器循环,迭代器remove操作时,如果有并发操作需要对Iterator对象加锁,下面是一般情况举例:
        //迭代器
        Iterator<User> iterator = userList.iterator();
        while (iterator.hasNext()) {
            if ("122".equals(iterator.next().getId())) {
                iterator.remove();
            }
        }
  • removeIf+lambda方法:实现简单且代码比较精简。推荐!!!

    //removeIf+lambda
    userList.removeIf(user -> "122".equals(user.getId()));
  • 还有其他正确操作:①普通for循环倒叙遍历并remove;②使用 removeAll
        List<String> list = new ArrayList<>();
        CollectionUtils.addAll(list,"122","002","122","001","002","001","003","122","001");
        System.out.println(list);
        
        //普通for循环倒叙遍历并remove
        for (int i = list.size()-1; i >=0; i--) {
            if ("122".equals(list.get(i))) {
                list.remove(i);
            }
        }
        System.out.println(list);
        
        //使用 removeAll方法 删除 
        List<String> removeList = new ArrayList<>(Arrays.asList("001","002"));
        list.removeAll(removeList); 
        System.out.println(list);

输出:

     

  • 注:正序的普通for循环、增强for、forEach循环遍历remove都会报错,原因如下:
  • 正序普通for循环:list 对象的modCount值进行了修改,而 list对象的迭代器中的expectedModCount值没有修改,所以抛出了异常
  • 增强for和forEach循环:http://t.csdnimg.cn/bA8W0
  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值