• 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
    
  • 相关阅读:
    vmware安装后设置网络
    博客园添加视频
    博客园音乐插件
    去除数组空格 php
    Jmeter 中多线程并发和循环控制器
    Jmeter对返回体中Json格式的reponse的处理
    Jmeter 抓app包 抓到一半不好用了
    Jmeter ResponseAssertion 【Ignore Status】
    JMeter源码导入到Intellij IDEA
    Jmeter 处理Unicode编码转为中文
  • 原文地址:https://www.cnblogs.com/daimzh/p/12854436.html
Copyright © 2020-2023  润新知