第46条:for-each循环优先于传统的for循环

本文探讨了Java中for-each循环与传统for循环的区别,分析了for-each循环的简洁性和预防bug的优势,并指出了不适合使用for-each循环的情况,如过滤、转换和并行迭代等场景。

1.代码直观对比

传统for循环

        for (Iterator<String> i = list.iterator();i.hasNext();) {
            doSomething(i.next());
        }

        for (int i = 0; i < list.size(); i++) {
            doSomething(list.get(i));
        }

for-each

        for (String str : list) {
            doSomething(str);
        }

2.for-each的优势

比传统的for循环:

  • 简洁性
  • 有效预防bug
  • 不用担心性能损失

关于有效预防bug以及简洁性,请看以下代码:

        // 不简洁,同时易误导致bug
        for (Iterator<String> i = list.iterator();i.hasNext();) {
            for (Iterator<String> j = list2.iterator();j.hasNext();) {
                doSomething(i.next(),j.next());
            }
        }

        // 简洁
        for (String s : list) {
            for (String s1 : list2) {
                doSomething(s,s1);
            }
        }

3.不能使用for-each情况

(1)过滤
如果需要遍历集合,并删除选定的元素,就需要使用显示的迭代器,以便可以调用它的remove方法。

        // 正确做法
        for (Iterator<String> i = list.iterator();i.hasNext();) {
            i.next();  // 指向要删除的元素
            i.remove();
        }
        // 错误做法
        for (int i = 0; i < list.size(); i++) {
            list.remove(i);
        }
        // 错误做法
        for (String s : list) {
            list.remove(s);
        }

关于删除集合元素参考:Java循环删除集合多个元素的正确打开方式

(2)转换
如果需要遍历所有元素,然后重新设定某些值,那么就需要李彪迭代器或者数组索引,以便设定元素的值。

(3)平行迭代
就是并行地同时遍历多个集合,需要显示地控制迭代器或者索引变量,以便所有迭代器或者索引变量都可以得到同步前移。

转载于:https://my.oschina.net/jtzen9/blog/1525855

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值