for 循环的使用历程 不同for循环的优势

仅仅是个人使用for 循环的经历 不完整的话请见谅

在这里插入图片描述

for (int i = 0; i < 10; i++)

这个是最早接触的for循环 在初学的时候也使用了很长时间 平常测试也会用到

    List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(i);
        }
        for (int i = 0; i < list.size(); i++) {
            Integer integer = list.get(i);
            System.out.println(integer);
        }

最大的特定是需要我们手动去通过下标进行值的获取

使用场景

1、当我需要通过不同的下标去做不同操作的时候这个是比较合适的一种方式

2、当我需要进行倒循环的时候 也可以直接使用
快捷方式(IDEA)
list.forr
在这里插入图片描述
这个就是倒序循环

        for (int i = list.size() - 1; i >= 0; i--) {
            Integer integer = list.get(i);
            System.out.println(integer);
        }

优点和缺点是并存的 我们可以更灵活的操作下标数据 同时也增加相应的操作 能满足绝大多数情境下的循环要求 对于初学者比较友好
还有就是这种形式对于映射集合不太友好 map的循环就不会去使用for (int i = 0; i < 10; i++) 这种形式
在这里插入图片描述

for (Integer integer : list)

这个我喜欢说是 for 循环的简易版增强版
首先这个减少我们手动的get(index)的操作
结构就是 for(类型(也就是List<泛型>) 值 :集合)

      for (Integer integer : list) {
            System.out.println(integer);
        }
使用场景

1、这个基本能覆盖大部分的集合操作 就是 上一个 的简化版。但是 进行倒序循环的时候就没那么便捷
2、不需要去操作下标的时候可以优先选择 减少我们的代码操作 少一行算一行
3、在需要对Map 形式的集合进行遍历的时候也相对友好一点

3.1 多说一点Map的循环吧这个很容易忘记 相对于List这个会比较长一点
1、分别拿key和value

      for(String key : map.keySet()){
            System.out.println("key="+key);
        }

        for(String value:map.values()){
            System.out.println("value="+value);
        }

2、拿取key 和 value

 for (Map.Entry<String, Object> entry : map.entrySet()) {
	      System.out.println("key="+entry.getKey()+"  value="+entry.getValue());
	    }

3、通过value 拿取 Key

for(String key: map.keySet()){
            String mapName = map.get(key);
            if(mapName.indexOf(name)>=0){
            	c = key;
                return c;
            }
        }

这种相对来说还是有点烦的 长时间不用就会忘记 可能我记忆不行
在这里插入图片描述

小总结

以上两种for 循环其实差不多 各有好处 只是不同的使用场景发挥不同的作用 共同点是
for循环里面,想要提前结束(终止)循环体使用"break"
结束本轮循环,进行下一轮循环使用"continue"
另外,在普通for里,如果使用"return",不仅强制结束for循环体,还会提前结束包含这个循环体的整个方法。

forEach()

这个真的又爱又烦
在这里插入图片描述
上一个循环在进行Map 循环的时候不好记 forEach 就是记忆力差的救星

        HashMap<Integer, Integer> map = new HashMap<>();
        map.put(1, 2);
        // 这里的 Key,value 可以随意命名
        map.forEach((key, value) -> {
            System.out.println(key + "" + value);
        });

在这里插入图片描述
真的超喜欢这个
在这里插入图片描述

普通集合

        list.forEach(item -> System.out.println(item));

也是很方便 包括一些对象的操作 都可以简化操作

        List<dicDataVo> dicDataVos = new ArrayList<>();
        dicDataVo dicData = new dicDataVo();
        dicData.setLabel("测试");
        dicDataVos.add(dicData);
        dicDataVos.forEach(dic -> dic.setLabel("hhhh"));
        dicDataVos.forEach(item -> System.out.println(item));

在这里插入图片描述
BUT!!!!!
在这里插入图片描述

这个有几个比较烦的点
1、不能直接给外部参数赋值
在这里插入图片描述
转换成AtomicXXX 应该是为了安全考虑

   AtomicInteger i = new AtomicInteger();
        list.forEach(item -> {
            i.set(2);
        });

2、结束循环不太优美
以上两个循环可以通过 break(推荐)return 结束循环 但是forEach不支持通过break结束循环
return也改变含义 只能跳过当前循环但是不能停止
在这里插入图片描述
那么怎么结束循环呢
进行异常跑抛出 通过异常进行停止
在这里插入图片描述
如果不用try { }catch (Exception e){ }进行捕获 就等于”自杀“
在这里插入图片描述
所以在终止方面 不是很舒服 但是依然是一个很便捷的循环方式

在这里插入图片描述

总结

每个循环各有优点 还是根据个人业务和习惯进行使用
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

变成派大星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值