zoukankan      html  css  js  c++  java
  • java基础篇 之 foreach探索

    我们看下这段代码:

    public class Main {
        public static void main(String[] args) {
            List list = new ArrayList();
            list.add(1);
            list.add(2);
            list.add(3);
            for (Object o : list) {
                System.out.println(o);
            }
        }
    }
    

    我们知道,foreach底层采用的是迭代器进行实现的,所以我们将文件编译,

    执行命令:javac Main.java

    可以得到如下的字节码文件:

    public class Main {
        public Main() {
        }
    
        public static void main(String[] var0) {
            ArrayList var1 = new ArrayList();
            var1.add(1);
            var1.add(2);
            var1.add(3);
            Iterator var2 = var1.iterator();
    
            while(var2.hasNext()) {
                Object var3 = var2.next();
                System.out.println(var3);
            }
    
        }
    }
    

    这样也就验证了,foreach确实底层采用的是Iterator进行实现的。

    现在问题来了,我们知道默认的foreach只能向前迭代,如果我们想使用向后的便利的foreach该怎么办呢?既然我们知道了并且验证了foreach底层使用的是iterator,那么我们能否能自定义一个呢?

    代码如下:

    /**
     * @author dmz
     * @date Create in 12:28 2019/5/24
     */
    public class MyList extends ArrayList {
        @Override
        public Iterator iterator() {
            System.out.println("我要向后走");
            return new Iterator() {
                int current = size()-1;
    
                @Override
                public boolean hasNext() {
                    return current > -1;
                }
    
                @Override
                public Object next() {
                    return get(current--);
                }
            };
        }
    }
    

    执行结果如下:

    我要向后走
    3
    2
    1
    
  • 相关阅读:
    visual studio notes
    使用.net创建activex控件
    在程序中打开/关闭monitor or lcd
    Memory Barrier in Compiler and CPU
    被动工作与主动工作
    排序算法总结
    经典计算机基础数据结构:二叉树
    微软的Challenge文化
    海量数据处理方法的分析
    数组
  • 原文地址:https://www.cnblogs.com/daimzh/p/12854436.html
Copyright © 2011-2022 走看看