java基础篇 之 foreach探索

简介: 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
相关文章
|
5月前
|
存储 Java
最新Java基础系列课程--Day10-IO流文件处理(一)
最新Java基础系列课程--Day10-IO流文件处理
|
10天前
|
存储 缓存 Java
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
这篇文章详细介绍了Java中的IO流,包括字符与字节的概念、编码格式、File类的使用、IO流的分类和原理,以及通过代码示例展示了各种流的应用,如节点流、处理流、缓存流、转换流、对象流和随机访问文件流。同时,还探讨了IDEA中设置项目编码格式的方法,以及如何处理序列化和反序列化问题。
38 1
java基础:IO流 理论与代码示例(详解、idea设置统一utf-8编码问题)
|
4月前
|
Java
【Java基础】输入输出流(IO流)
Java基础、输入输出流、IO流、流的概念、输入输出流的类层次结构图、使用 InputStream 和 OutputStream流类、使用 Reader 和 Writer 流类
152 2
|
1月前
|
安全 Java API
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
String常量池、String、StringBuffer、Stringbuilder有什么区别、List与Set的区别、ArrayList和LinkedList的区别、HashMap底层原理、ConcurrentHashMap、HashMap和Hashtable的区别、泛型擦除、ABA问题、IO多路复用、BIO、NIO、O、异常处理机制、反射
【Java面试题汇总】Java基础篇——String+集合+泛型+IO+异常+反射(2023版)
|
2月前
|
存储 Java 索引
Java中foreach遍历数组如何拿到想要的值
总结来说,通过foreach循环遍历数组并获取所需的值是一种简单且代码清晰的操作,特别适用于只需访问集合或数组中的每个元素且不需要元素索引或修改集合的场景。在实际编程中,根据场景需求合理选择循环类型,可大大提高代码的可读性与效率。
131 4
|
4月前
|
安全 Java
|
4月前
|
搜索推荐 算法 Java
【Java基础】 几种简单的算法排序
几种简单的JAVA算法排序
49 4
|
4月前
|
Java
解密 Java ForEach 提前终止问题
解密 Java ForEach 提前终止问题
25 0
|
4月前
|
Java Python
【学习记录 time:】Java8 Lambda 表达式中的 forEach 如何提前终止?
【学习记录 time:】Java8 Lambda 表达式中的 forEach 如何提前终止?
26 0
|
4月前
|
Java
java中Stream流中的forEach、filter、map、count、limit、skip、concat
java中Stream流中的forEach、filter、map、count、limit、skip、concat
127 0