Java集合——Iterable和Iterator接口介绍

2023-10-27

Iterable和Iterator是什么?

Iterable是Collection的实现接口,即是集合的最顶级父类

Iterator用于代替旧的Enumeration,实现集合的统一遍历

前提阅读:设计模式——迭代器模式

Iterable源码

  • iterator()方法,用于返回T类型的迭代器
  • forEach(Consumer<? super T> action)默认方法,用于遍历所有集合,简化Iterator遍历过程,并不是所有集合都可foreach遍历,故存在默认实现
  • spliterator()默认方法不知道
public interface Iterable<T> {

  	public Iterator<T> iterator();
  
  	public default void forEach(Consumer<? super T> action) { 
  			throw new RuntimeException("Stub!"); 
 	 }
  
  	public default Spliterator<T> spliterator() {
  			throw new RuntimeException("Stub!");
  	}
}

Iterator源码

在旧的Enumeration中只有hasMoreElements()和nextElement(),而对于Iterator新增了两个默认方法

  • hasNext():判断是否存在下一个元素
  • next():Iterator位于两个元素之间的间隔,每次调用next()就会越过下一个元素并将其引用返回
  • remove():删除上次调用next()时返回的元素,每次调用remove()前需调用next()
  • forEachRemaining():不知道
public interface Iterator<E> {

	boolean hasNext();
	
	E next();
	
	default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    
	default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }

使用

对于所有实现了Iterable的类,内部都实现并维护了一个自身的Iterator迭代器(一般为私有内部类),重写其4个方法,将自身的遍历过程包装,并通过iterator()方法返回

Iterable<String> iterable = new ArrayList<>();
Iterator<String> iterator = iterable.iterator();
while (iterator.hasNext()) {
    System.out.println(iterator.next());
}

foreach可与任何实现了Iterable接口的对象一起工作,简化迭代器迭代过程

Iterable<String> iterable = new ArrayList<>();
for (String s : iterable) {
    System.out.println(s);
}

在Java8之后,甚至可不用写循环,利用forEachRemaining()并传入Lambda表达式,将对迭代器的每一个元素调用该Lambda表达式

Iterable<String> iterable = new ArrayList<>();
Iterator<String> iterator = iterable.iterator();
iterator.forEachRemaining(s -> System.out.println(s));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java集合——Iterable和Iterator接口介绍 的相关文章

随机推荐

  • Halcon判断一个点是否在某个区域

    Index of all regions containing a given pixel read image Image fabrik dev close window dev open window 0 0 512 512 black
  • Vue + ElementUI 实现后台管理系统模板 -- 前端篇(九):使用 iframe 标签嵌套页面 及内容顶部tab页签

    一 使用 iframe 标签嵌套页面 1 简单了解一下 1 什么是 iframe iframe 标签会创建一个行内框架 包含另一个文档的内联框架 简单地理解 页面中嵌套另一个页面 2 使用场景 有的项目需求 需要在当前页面中显示外部网页 比
  • 给wordpress添加关键词与描述

    Wordpress网站的关键字及网页描述关系网站对搜索引擎的友好程度 如果自己手动加显然太折腾了 那如何让WordPress博客自动为每篇文章自动关键字及网页描述 每篇文章的内容不同 我们该如何让wordpress自动添加文章描述和关键词呢
  • Heyperledger Fabric 运行时架构

    一 运行时架构图 逻辑架构图说明了Heyperledger Fabric 的各个核心组件 模块 由于Heyperledger Fabric 是一个需要保证交易数据安全的分布式系统 所以再实际运行时将不同的服务器配置成为不同的Node 节点
  • allegro中网表的导入与器件放置

    文章目录 封装库路径的指定 网表导入 器件放置 自动器件放置 手动器件放置 room器件放置 封装库路径的指定 Setup User Perference Paths Library中zhi dzhid 特别关注一下三个路径 devpath
  • 小程序开发——比较好看的登录界面设计

    主要代码 login wxml
  • Windows10开机自动运行批处理、脚本等的方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 方法 步骤 一 打开我的电脑 在地址栏输入 C ProgramData Microsoft Windows Start Menu Programs Startup 二 把自
  • 彻底解决乱码问题(附一):简体中文编码中区位码、国标码、内码、外码、字形码的区别及关系

    首先声明这篇博客的创作过程 大部分文本来自 笨笨阿林 的原创文章 我在看完后加入了部分自己的理解 有些地方做了略微调整 比如将有些不易理解的地方重新解释 多余的话删除等 也在最后加入了一个例子来证实了一下在GB2312编码下从区位码到实际在
  • vue3-print-nb 实现页面打印(含分页打印)

    安装vue3 print nb npm install vue3 print nb save 引用vue3 print nb 全局引入 全局引用 import createApp from vue import App from App v
  • 左程云算法笔记(三)堆排序、桶排序、排序总结

    左程云算法笔记 三 堆 堆结构 堆排序 堆排序扩展题 桶排序 计数排序 基数排序 补 桶排序 补 希尔排序 排序总结 稳定性 综合比较 常见的坑 工程上对排序的改进 堆 堆结构 1 堆结构就是用数组实现的完全二叉树结构 2 完全二叉树中如果
  • Spring Boot使用(基础)

    目录 1 Spring Boot是什么 2 Spring Boot使用 2 1Spring目录介绍 2 2SpringBoot的使用 1 Spring Boot是什么 Spring Boot就是Spring脚手架 就是为了简化Spring开
  • 权重设计介绍

    相关产品 RocketMQ 之前在阿里的 负载均衡 比赛中 就有这个算法 RocketMQ 中包含多种负载算法 其中 权重 算法就属于其中一种 也是最实用的一种 奖励系统 经常会有许多活动 或则任务 当用户完成后 可以获得相关的奖励 当然可
  • 华为OD机试 - 评论转换输出(Java)

    题目描述 在一个博客网站上 每篇博客都有评论 每一条评论都是一个非空英文字母字符串 评论具有树状结构 除了根评论外 每个评论都有一个父评论 当评论保存时 使用以下格式 首先是评论的内容 然后是回复当前评论的数量 最后是当前评论的所有了评论
  • 操作系统内核

    现代操作系统一般将OS划分为若干个层次 再将OS的不同功能分别设置在不同的层次中 通常将一些与硬件紧密相关的模块 如中断处理程序等 各种常用及运行频率较高的模块 如时钟管理 进程调度和许多模块所公用的二些基本操作 都安排在紧靠硬件的软件层次
  • vue生命周期

    随着对 vue 的不断了解 会越来越发现它生命周期的重要性 只有了解了它的生命周期 才能在开发项目的时候在逻辑上的很好的判断什么时候该发生什么事件 即很好的控制页面 一 什么是 vue 生命周期 Vue 实例从创建到销毁的过程 就是生命周期
  • kong+Verdaccio+ldap(docker)

    需求 使用Kong来代理Verdaccio 实现直接通过域名 path的方式来访问 并且Verdaccio使用ldap来管理 前提 Kong ldap已部署好 并且也部署好了Kong Dashboard 后面有需求再写关于Kong代理的各种
  • 国内的Ubuntu镜像源

    国内的Ubuntu镜像源 Ubuntu清华镜像源 今天学习docker需要在线Ubuntu镜像 所以做了一个镜像下载地址笔记 方面以后的下载 官方镜像下载访问地址 https cn ubuntu com download alternati
  • 明哥复习MyBatis(1)

    这不是原创 借鉴尚硅谷的 不是原创 一 核心配置文件详解
  • impdp或expdp报错ORA-39002: invalid operation,ORA-39070: Unable to open the log file

    oracle oracle rac01 backup cat expdp par USERID as sysdba DIRECTORY KMDATA EXP job name jinky exp filesize 5000m paralle
  • Java集合——Iterable和Iterator接口介绍

    Iterable Iterable和Iterator是什么 Iterable源码 Iterator源码 使用 Iterable和Iterator是什么 Iterable是Collection的实现接口 即是集合的最顶级父类 Iterator