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

Java集合大总结——Iterator(迭代器)接口

Iterator接口

  • 在程序开发中,经常需要遍历集合中的所有元素。针对这种需求,JDK专门提供了一个接口java.util.Iterator

  • Iterator接口也是Java集合中的一员,但它与CollectionMap接口有所不同。

    • Collection接口与Map接口主要用于存储元素
    • Iterator,被称为迭代器接口,本身并不提供存储对象的能力,主要用于遍历Collection中的元素
  • Collection接口继承了java.lang.Iterable接口,该接口有一个iterator()方法,那么所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象。

    • public Iterator iterator(): 获取集合对应的迭代器,用来遍历集合中的元素的。
    • 集合对象每次调用iterator()方法都得到一个全新的迭代器对象,默认游标都在集合的第一个元素之前。
  • Iterator接口的常用方法如下:

    • public E next():返回迭代的下一个元素。
    • public boolean hasNext():如果仍有元素可以迭代,则返回 true。
  • 注意:在调用it.next()方法之前必须要调用it.hasNext()进行检测。若不调用,且下一条记录无效,直接调用it.next()会抛出NoSuchElementException异常

迭代器的执行原理

Iterator迭代器对象在遍历集合时,内部采用指针的方式来跟踪集合中的元素,接下来通过一个图例来演示Iterator对象迭代元素的过程:
在这里插入图片描述

增强for循环

  • foreach循环(也称增强for循环)是 JDK5.0 中定义的一个高级for循环,专门用来遍历数组和集合的。

  • foreach循环的语法格式:

for(元素的数据类型 局部变量 : Collection集合或数组){ //操作局部变量的输出操作
}
//这里局部变量就是一个临时变量,自己命名就可以

举个栗子:

package cn.edu.chd.exer4;import java.util.ArrayList;/*** ClassName:Main* Description:* 增强for循环的使用* @Create 2023/11/19 10:46*/
public class Main {public static void main(String[] args) {//增强for循环的练习ArrayList<Integer> arrayList = new ArrayList<>();//基本数据类型进行装箱arrayList.add(5);arrayList.add(2);arrayList.add(0);arrayList.add(1);//使用增强for循环进行遍历for (Integer i: arrayList) {System.out.println(i);}}
}

对于集合的遍历,增强for的内部原理其实是个Iterator迭代器。如下图。
在这里插入图片描述
它用于遍历Collection和数组。通常只进行遍历元素,不要在遍历的过程中对集合元素进行增删操作。

相关文章:

  • Django框架之模型层(一)
  • 让你彻底学会HBase
  • PL/SQL编程
  • 【SpringBoot3+Vue3】四【实战篇】-前端(vue基础)
  • 使用Jupyter Notebook调试PySpark程序错误总结
  • 度小满:人工智能在金融行业中的创新应用
  • 数据双向 双向数据绑定
  • Java业务场景(一):实现屏蔽手机号码功能 用户手机号隐私功能 字符串截取 || 拼接
  • 【小沐学GIS】电子海图OpenCPN源代码编译和运行(VS2017 + Win10)
  • Appium移动自动化测试--安装Appium
  • 【周报2023-11-10】
  • Linux下查看pytorch运行时真正调用的cuda版本
  • 搞科研、写论文,如何正确使用GPT?AIGC技术解析、提示词工程高级技巧、AI绘图、ChatGPT/GPT4应用
  • 庖丁解牛:NIO核心概念与机制详解 02 _ 缓冲区的细节实现
  • 数学建模值TOPSIS法及代码
  • 【391天】每日项目总结系列128(2018.03.03)
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Date型的使用
  • git 常用命令
  • gulp 教程
  • JavaScript异步流程控制的前世今生
  • Joomla 2.x, 3.x useful code cheatsheet
  • JS实现简单的MVC模式开发小游戏
  • laravel with 查询列表限制条数
  • node学习系列之简单文件上传
  • PHP 的 SAPI 是个什么东西
  • React组件设计模式(一)
  • Spark RDD学习: aggregate函数
  • Vue.js-Day01
  • 分类模型——Logistics Regression
  • 前端性能优化——回流与重绘
  • 如何优雅地使用 Sublime Text
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 说说动画卡顿的解决方案
  • 思考 CSS 架构
  • 写代码的正确姿势
  • 学习HTTP相关知识笔记
  • 在Docker Swarm上部署Apache Storm:第1部分
  • const的用法,特别是用在函数前面与后面的区别
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • ​创新驱动,边缘计算领袖:亚马逊云科技海外服务器服务再进化
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (9)目标检测_SSD的原理
  • (待修改)PyG安装步骤
  • (每日持续更新)jdk api之StringBufferInputStream基础、应用、实战
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (篇九)MySQL常用内置函数
  • (七)c52学习之旅-中断
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • (转)程序员技术练级攻略