当前位置: 首页 > news >正文

[java]Iterable<Integer> 和Iterator<Integer>的区别和用法

Iterable<Integer>Iterator<Integer> 在 Java 中都是用于处理集合数据的重要接口,但它们的角色和用途有所不同。以下是它们之间的主要区别:
 

1. 接口角色

  • Iterable<T>:这是一个接口,它定义了如何获取一个迭代器来遍历集合。通常用于表示一个可以被迭代的对象,即一个可以提供一系列元素的对象。

  • Iterator<T>:这也是一个接口,它定义了如何遍历集合中的元素。通常用于实际的遍历逻辑,即如何按需获取集合中的元素。

2. 方法定义

Iterable<T> 接口

Iterable 接口定义了以下方法:

  • Iterator<T> iterator():返回一个用于遍历此 Iterable 的迭代器。
public interface Iterable<T> {Iterator<T> iterator();
}
Iterator<T> 接口

Iterator 接口定义了以下方法:

  • boolean hasNext():如果仍有更多的元素,则返回 true
  • T next():返回迭代中的下一个元素。
  • void remove():可选操作,从迭代器指向的集合中删除上次返回的元素(可选)。
public interface Iterator<T> {boolean hasNext();T next();default void remove() { throw new UnsupportedOperationException("remove"); }
}

3. 使用场景

Iterable<T> 使用场景
  • 集合类Iterable 接口通常由集合类(如 ListSetMap 等)实现,以提供遍历其元素的能力。
  • 自定义集合:如果你需要创建自己的集合类或其他可迭代的对象,可以实现 Iterable 接口来提供迭代能力。
import java.util.Iterator;public class MyIterable implements Iterable<Integer> {@Overridepublic Iterator<Integer> iterator() {return new Iterator<Integer>() {private int current = 0;private final int end = 10;@Overridepublic boolean hasNext() {return current < end;}@Overridepublic Integer next() {return current++;}};}
}
Iterator<T> 使用场景
  • 遍历集合Iterator 接口用于实际遍历集合中的元素。
  • 自定义迭代逻辑:如果你需要自定义遍历逻辑,可以在实现 Iterable 接口时返回一个实现了 Iterator 接口的对象。
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;public class IteratorExample {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);Iterator<Integer> iterator = list.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

4. 实现和使用

使用 Iterable<T>
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;public class IterableExample {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);for (Integer i : list) {System.out.println(i);}}
}
使用 Iterator<T>
import java.util.ArrayList;
import java.util.List;
import java.util.Iterator;public class IteratorExample {public static void main(String[] args) {List<Integer> list = new ArrayList<>();list.add(1);list.add(2);list.add(3);Iterator<Integer> iterator = list.iterator();while (iterator.hasNext()) {System.out.println(iterator.next());}}
}

总结

  • Iterable<T>:定义了如何获取一个迭代器来遍历集合。通常由集合类实现,提供遍历能力。
  • Iterator<T>:定义了如何遍历集合中的元素。通常用于实际的遍历逻辑。

简而言之,Iterable 是一个接口,用于获取迭代器;而 Iterator 是一个接口,用于实际遍历集合中的元素。在实际应用中,Iterable 通常用于定义集合的遍历逻辑,而 Iterator 用于执行具体的遍历操作。

http://www.lryc.cn/news/459047.html

相关文章:

  • JavaScript进行数据可视化:D3.js入门
  • 字符串拼接方法性能对比和分析
  • [Halcon矩阵] 通过手眼标定矩阵计算相机旋转角度
  • 推荐几本编程入门书目
  • 每天一个数据分析题(五百零五)- 提升方法
  • 华为云ECS部署DR模式的LVS
  • 如何在 Jupyter Notebook 执行和学习 SQL 语句(上)
  • 数据结构-5.7.二叉树的层次遍历
  • RISC-V知识点目录
  • C++11 新特性 学习笔记
  • Go 语言中的格式化占位符
  • QD1-P5 HTML 段落标签(p)换行标签(br)
  • Django的模板语法
  • 【在Linux世界中追寻伟大的One Piece】信号捕捉|阻塞信号
  • 信息系统运维管理方案,运维建设文档,运维平台建设方案,软件硬件中间件运维方案,信息安全管理(原件word,PPT,excel)
  • 多元统计实验报告内容
  • 使用机器学习边缘设备的快速目标检测
  • Anthropic的CEO达里奥·阿莫迪(Dario Amodei)文章传达他对AI未来的乐观展望
  • Human-M3 多模态姿态估计数据集-初步解读
  • python爬虫 - 进阶正则表达式
  • 静态路由和nqa 联动实验
  • golang用any类型去接收前端传的数字类型的值,类型断言为float64
  • 5、Spring Boot 3.x 集成 RabbitMQ
  • ENSP搭建基础网络拓扑图
  • 尚硅谷rabbitmq 2024 消息可靠性答疑二 第22节
  • 在 Ubuntu 上安装 Whisper 支撑环境(ffmpeg、PyTorch)的教程(2024亲测可用)
  • vue+echarts实现雷达图及刻度标注
  • 【进阶OpenCV】 (9)--摄像头操作--->答题卡识别改分项目
  • 实时从TDengine数据库采集数据到Kafka Topic
  • Linux -- 初识动静态库