zoukankan      html  css  js  c++  java
  • 第46条:for-each循环优先于传统的for循环

    for-each循环通过完全隐藏迭代器或者索引变量,避免混乱和出错的可能,适用于集合和数组和任何实现Iterable接口的对象。

    使用传统for循环,容易出错:

    enum Face { ONE, TWO, THREE, FOUR, FIVE, SIX }
    
    Collection<Face> faces = Arrays.asList(Face.values());
    
    for(Iterator<Face> i = faces.iterator(); i.hasNext();) 
        for(Iterator<Face> j = faces.iterator(); j.hasNext();) 
            System.out.println(i.next() + " " + j.next());

    期望打印出36个组合,实际上只打印出6个组合

    修正:

    enum Face { ONE, TWO, THREE, FOUR, FIVE, SIX }
    
    Collection<Face> faces = Arrays.asList(Face.values());
    
    for(Iterator<Face> i = faces.iterator(); i.hasNext();) 
        Face face = i.next();
        for(Iterator<Face> j = faces.iterator(); j.hasNext();) 
            System.out.println(face + " " + j.next());

    使用嵌套for-each循环更简洁:

    for(Face face1 : faces)
        for(Face face2 : faces)
            System.out.println(face1 + " " + face2);

    无法使用for-each循环的情况:

    1.过滤,需要遍历集合并删除选定的元素,需要显式的迭代器,以便调用它的remove方法

    2.转换,需要遍历列表或者数组,并取代它部分或者全部元素值,需要列表迭代器或者数组索引,以便设定元素的值

    3.平行迭代,并行地遍历多个集合,需要显式地控制迭代器或者索引变量,以便所有迭代器和索引变量都可以得到同步前移(像上述第一个代码 块那样)

  • 相关阅读:
    使用ExcelMapper制作用于打印的矩阵
    八皇后问题-回溯法解
    HashMap-1.8 你看得懂的原理分析
    一生之敌
    必学十大经典排序算法,看这篇就够了(附完整代码/动图/优质文章)
    事务的四种隔离级别
    数据库的三范式
    ConcurrentHashMap底层实现原理和源码分析
    leetcode-160-相交链表(simple)
    JAVA中priorityqueue详解
  • 原文地址:https://www.cnblogs.com/13jhzeng/p/5755020.html
Copyright © 2011-2022 走看看