iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Java源码解析之Iterable接口
  • 468
分享到

Java源码解析之Iterable接口

2024-04-02 19:04:59 468人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录一、写法1–循环二、写法2–foreach循环三、写法3–Iterator四、Iterable五、Iterator这里我们给定一个集合strings 一、写法1–循环 for

这里我们给定一个集合strings

一、写法1–循环


for (int i = 0, len = strings.size(); i < len; i++) {
    System.out.println(strings.get(i));
}

二、写法2–foreach循环


for (String var : strings) {
    System.out.println(var);
}

三、写法3–Iterator


Iterator iterator = strings.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

对于以上三种遍历方式,相信大家都很熟悉了吧。for循环可以理解为就是通过下标来获取元素,这个特点就和数组很相似。foreach主要对类似链表的解耦提供遍历支持,链表没有下标,如果使用foreach循环的话会大大降低性能。Iterator就是我们今天 要讲述的主角,它实际上就是foreach。

那既然Java为集合提供了这么几种遍历方式,那如果是普通对象或者是任何对象,那又该怎么遍历呢?

四、Iterable

Iterable是迭代器的意思,作用是为集合类提供for-each循环的支持。由于使用for循环需要通过位置获取元素,而这种获取方式仅有数组支持,其他许多数据结构,比如链表,只能通过查询获取数据,这会大大的降低效率。Iterable就可以让不同的集合类自己提供遍历的最佳方式。

我们来看看Iterable文档声明,其中有一句话是这么说的:


Implementing this interface allows an object to be the target of the "for-each loop" statement.

它的作用就是为Java对象提供foreach循环,其主要方法是返回一个Iterator对象:


Iterator<T> iterator();

意思就是,如果想让任意一个Java对象支持foreach,只要实现iterable接口,然后就可以通过Iterator iterator = strings.iterator()的方式,想集合那样遍历了。

五、Iterator

Iterator是foreach遍历的主体,我们来看看它是怎么实现的呢?


// 判断一个对象集合是否还有下一个元素
boolean hasNext();

// 获取下一个元素
E next();

// 删除最后一个元素。默认是不支持的,因为在很多情况下其结果不可预测,比如数据集合在此时被修改
default void remove(){...}

// 主要将每个元素作为参数发给action来执行特定操作
default void forEachRemaining(Consumer<? super E> action){...}

除此之外,Iterator还有一个子接口,施伟需要双向遍历数据时准备的,来看看它增加了那些方法吧


// 是否有前一个元素
boolean hasPrevious();

// 获取前一个元素
E previous();

// 获取下一个元素的位置
int nextIndex();

// 获取前一个元素的位置
int previousIndex();

// 添加一个元素
void add(E e);

// 替换当前元素值
void set(E e);

六、总结

在Java中有许多特性都是通过接口来实现的,foreach循环也是。foreach主要是解决for循环依赖下标的问题,为高效遍历更多的数据结提供了支持。

到此这篇关于Java源码解析之Iterable接口的文章就介绍到这了,更多相关Java Iterable接口内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Java源码解析之Iterable接口

本文链接: https://www.lsjlt.com/news/126554.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java源码解析之Iterable接口
    目录一、写法1–循环二、写法2–foreach循环三、写法3–Iterator四、Iterable五、Iterator这里我们给定一个集合strings 一、写法1–循环 for...
    99+
    2024-04-02
  • Java源码解析之接口Collection
    目录一、图示二、方法定义三、超级实现类 AbstractCollection一、图示 二、方法定义 我们先想一想,公司如果要我们自己去封装一些操作数组或者链表的工具类,我么需要封装...
    99+
    2024-04-02
  • Java源码解析之接口List
    目录前言一、List特有的方法二、超级实现类AbstractList三、SubList、equals和hascode前言 List接口是Collection接口的三大接口之一,其中的...
    99+
    2024-04-02
  • Java源码解析之超级接口Map
    目录前言一、接口Map二、接口Map.Entry三、一些重要的方法四、超级实现类AbstractMap前言 我们在前面说到的无论是链表还是数组,都有自己的优缺点,数组查询速度很快而插...
    99+
    2024-04-02
  • Java源码解析之接口Collection的示例分析
    小编给大家分享一下Java源码解析之接口Collection的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、图示二、方法定义我们先想一想,公司如果要我...
    99+
    2023-06-15
  • java 中RandomAccess接口源码分析
    java 中RandomAccess接口源码分析RandomAccess是一个接口,位于java.util包中。这个接口的作用注释写的很清楚了:public interface RandomAccess {}...
    99+
    2023-05-31
    java randomaccess ava
  • Java源码解析之ClassLoader
    目录一、前言二、java 中的 ClassLoader三、Android 中的 ClassLoader四、双亲委派机制五、源码分析一、前言 一个完整的Java应用程序,当程序在运行时...
    99+
    2024-04-02
  • Java源码解析之LinkedHashMap
    目录一、成员变量二、构造函数三、重要方法一、成员变量 先来看看存储元素的结构吧: static class Entry<K,V> extends HashMap.No...
    99+
    2024-04-02
  • Java源码解析之ConcurrentHashMap
    早期 ConcurrentHashMap,其实现是基于: 分离锁,也就是将内部进行分段(Segment),里面则是 HashEntry 的数组,和 HashMap 类似,哈...
    99+
    2024-04-02
  • Java源码解析之详解ImmutableMap
    一、案例场景 遇到过这样的场景,在定义一个static修饰的Map时,使用了大量的put()方法赋值,就类似这样—— public static final Map<St...
    99+
    2024-04-02
  • Java源码解析之详解ReentrantLock
    ReentrantLock ReentrantLock是一种可重入的互斥锁,它的行为和作用与关键字synchronized有些类似,在并发场景下可以让多个线程按照一定的顺序访问同一资...
    99+
    2024-04-02
  • Java源码解析之SortedMap和NavigableMap
    目录一、前言二、sortedMap接口三、NavigableMap接口一、前言 由于乱序的数据对查找不利,例如无法使用二分法等降低算法的时间复杂度,如果数据在插入时就排好序,查找的性...
    99+
    2024-04-02
  • Java源码刨析之ArrayQueue
    目录ArrayQueue内部实现ArrayQueue源码剖析总结ArrayQueue内部实现 在谈ArrayQueue的内部实现之前我们先来看一个ArrayQueue的使用例子: p...
    99+
    2024-04-02
  • Java源码刨析之ArrayDeque
    目录前言双端队列整体分析数组实现ArrayDeque(双端队列)的原理底层数据遍历顺序和逻辑顺序ArrayDeque类关键字段分析ArrayDeque构造函数分析ArrayDeque...
    99+
    2024-04-02
  • Java多线程之ReentrantReadWriteLock源码解析
    目录一、介绍1.1 ReentrantReadWriteLock1.2 state1.3 HoldCounter二、读锁2.1 读锁的获取2.1.1 tryAcquireShared...
    99+
    2024-04-02
  • Java源码解析之ConcurrentHashMap的示例分析
    小编给大家分享一下Java源码解析之ConcurrentHashMap的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!早期 ConcurrentHashMap,其实现是基于:分离锁,也就是将内部进行分段(Segme...
    99+
    2023-06-15
  • Java源码解析之平衡二叉树
    目录一、平衡二叉树的定义二、平衡二叉树的实现原理三、最终结果一、平衡二叉树的定义 平衡二叉树是一种二叉排序树,其中每一个节点的左子树和右子树的高度差至多等于1 。它是一种高度平衡的二...
    99+
    2024-04-02
  • Java源码解析之Gateway请求转发
    Gateway请求转发 本期我们主要还是讲解一下Gateway,上一期我们讲解了一下Gateway中进行路由转发的关键角色,过滤器和断言是如何被加载的,上期链接://www.jb51...
    99+
    2024-04-02
  • Java并发编程之LongAdder源码解析
    目录前言源码简介前言 上一篇文章 Java并发编程之原子类(二)中介绍了LongAdder常用的方法,今天我们根据源码来分析一下它的基本实现流程。 This class is usu...
    99+
    2023-05-18
    Java并发LongAdder Java并发
  • Java并发编程之CountDownLatch源码解析
    目录一、前言二、使用三、源码分析四、总结一、前言 CountDownLatch维护了一个计数器(还是是state字段),调用countDown方法会将计数器减1,调用await方法会...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作