java基础-Iterator 接口

Java 中的Iterator 接口是 Java 集合框架(Java Collections Framework)中的一个核心接口,用于遍历集合中的元素。它提供了一种统一的方式来访问集合中的元素,而不需要暴露集合的内部结构。

1.Iterator 接口的主要方法

public interface Iterator<E> { // 检查是否还有下一个元素 boolean hasNext(); // 返回下一个元素 E next(); // 删除当前元素(可选操作) default void remove(); // JDK 8+ 新增:对剩余元素执行操作 default void forEachRemaining(Consumer<? super E> action); }

2.基本使用示例

import java.util.*; public class IteratorExample { public static void main(String[] args) { List<String> list = Arrays.asList("Apple", "Banana", "Cherry"); Iterator<String> iterator = list.iterator(); // 遍历集合 while (iterator.hasNext()) { String fruit = iterator.next(); System.out.println(fruit); } } }

3.在循环中的使用

传统 while 循环

Iterator<String> it = list.iterator(); while (it.hasNext()) { String element = it.next(); // 处理元素 }

使用 for-each 循环(底层使用 Iterator)

for (String element : list) { // 处理元素 }

forEachRemaining 方法(Java 8+)

Iterator<String> it = list.iterator(); it.forEachRemaining(element -> { System.out.println(element); });

4.remove() 方法的使用

List<Integer> numbers = new ArrayList<>(Arrays.asList(1, 2, 3, 4, 5)); Iterator<Integer> it = numbers.iterator(); while (it.hasNext()) { Integer num = it.next(); if (num % 2 == 0) { // 删除偶数 it.remove(); // 安全删除当前元素 } } // numbers 现在包含 [1, 3, 5]

重要:必须先调用next()再调用remove(),且不能连续调用两次remove()

5.ListIterator(增强版 Iterator)

ListIterator扩展了Iterator,支持双向遍历和修改操作:

List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C")); ListIterator<String> listIterator = list.listIterator(); // 向前遍历 while (listIterator.hasNext()) { System.out.println(listIterator.next()); } // 向后遍历 while (listIterator.hasPrevious()) { System.out.println(listIterator.previous()); } // 添加和修改元素 listIterator.add("D"); listIterator.set("E");

6.实现自定义 Iterator

class FixedSizeList<T> implements Iterable<T> { private T[] array; private int size; public FixedSizeList(T[] array) { this.array = array; this.size = array.length; } @Override public Iterator<T> iterator() { return new Iterator<T>() { private int currentIndex = 0; @Override public boolean hasNext() { return currentIndex < size; } @Override public T next() { if (!hasNext()) { throw new NoSuchElementException(); } return array[currentIndex++]; } @Override public void remove() { throw new UnsupportedOperationException("Remove not supported"); } }; } }

7.与 Stream API 的比较(Java 8+)

// 使用 Iterator Iterator<String> it = list.iterator(); while (it.hasNext()) { String s = it.next(); if (s.startsWith("A")) { System.out.println(s); } } // 使用 Stream API(更现代) list.stream() .filter(s -> s.startsWith("A")) .forEach(System.out::println);

8.最佳实践和注意事项

  1. 并发修改异常

    List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); // 错误示例:会抛出 ConcurrentModificationException for (String s : list) { if ("B".equals(s)) { list.remove(s); // 直接修改原集合 } } // 正确示例:使用 Iterator 的 remove() Iterator<String> it = list.iterator(); while (it.hasNext()) { if ("B".equals(it.next())) { it.remove(); // 安全删除 } }
  2. 性能考虑:对于ArrayList,Iterator 遍历和 for 循环性能相似;对于LinkedList,Iterator 性能更好。

  3. 不可逆性:普通 Iterator 只能向前遍历,如果需要双向遍历,使用ListIterator

  4. 线程安全:Iterator 不是线程安全的,在多线程环境下需要同步或使用并发集合。

9.常见实现类

集合类Iterator 实现特点
ArrayList快速随机访问
LinkedList优化顺序访问
HashSet无序遍历
TreeSet有序遍历
HashMap.keySet()遍历键

总结:Iterator 提供了一种标准化的遍历集合的方式,是 Java 集合框架的基础组件。在现代 Java 开发中,虽然 Stream API 提供了更强大的功能,但 Iterator 在简单遍历和某些特定场景下仍然非常有用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1191589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CLAUDE.md - 让AI理解你的项目的秘密武器

CLAUDE.md - 让AI理解你的项目的秘密武器核心观点&#xff1a;一个写得好的CLAUDE.md可以将Claude Code的生产力提升50-100%&#xff0c;这是上下文管理中最高效的投资。 关键词&#xff1a;CLAUDE.md、上下文管理、项目文档、Claude Code配置、工作流优化导读 你将学到&#x…

AI Agent:下一代人工智能的核心范式

AI Agent&#xff1a;下一代人工智能的核心范式 引言 AI Agent&#xff08;人工智能智能体&#xff09;是当前AI领域最热门的话题之一。它代表了从被动响应到主动思考、规划和执行的范式转变。本文将深入剖析AI Agent的核心概念、技术架构以及其广阔的应用前景。 什么是AI Agen…

从数字协同到业务执行:创客匠人 AI 智能体重新定义知识变现的 “结果交付”

当知识付费用户规模突破 6.4 亿&#xff0c;行业却陷入 “叫好不叫座” 的尴尬境地&#xff1a;52.4% 的用户认为知识付费 “宣传与实际不符”&#xff0c;54.3% 抱怨 “学完没有实际效果”。这一矛盾的核心&#xff0c;是传统知识变现模式停留在 “提供内容” 层面&#xff0c…

项目经理别瞎忙!3个能力+1个工具,项目延期从此是路人

项目延期、团队内耗、需求反复&#xff0c;是很多项目经理日常面临的“三座大山”。想要打破困局&#xff0c;不用靠“拼命加班”&#xff0c;关键是抓准核心能力&#xff0c;用对工具和方法&#xff0c;就能实现高效控场。 一、目标拆解能力&#xff1a;把“大目标”拆成“可落…

创客匠人 AI 智能体:知识变现的数字劳动力革命,重构 IP 人力模型

在知识付费行业&#xff0c;“人力瓶颈” 始终是创始人 IP 难以突破的增长枷锁 —— 某行业报告显示&#xff0c;75% 的知识 IP 团队人力成本占比超 60%&#xff0c;却仍面临 “人不够用、效率低下、服务断层” 的困境。传统模式中&#xff0c;知识变现高度依赖 “创始人 核心…

车用直流有刷电机市场调研2026:应用场景、产业链及市场演进趋势分析

根据QYResearch调研&#xff0c;2025年全球车用直流有刷电机市场销售额达到了116.8亿美元&#xff0c;预计2032年市场规模将为137.8亿美元&#xff0c;2026-2032期间年复合增长率&#xff08;CAGR&#xff09;为2.4%。车用直流有刷电机多采用永磁直流&#xff08;PMDC&#xff…

[特殊字符]_Web框架性能终极对决:谁才是真正的速度王者[20260120170511]

作为一名拥有10年开发经验的全栈工程师&#xff0c;我经历过无数Web框架的兴衰更替。从早期的jQuery时代到现在的Rust高性能框架&#xff0c;我见证了Web开发技术的飞速发展。今天我要分享一个让我震惊的性能对比测试&#xff0c;这个测试结果彻底改变了我对Web框架性能的认知。…

父亲那一眼,看得人心都碎了!《我的朋友安德烈》后劲太大

电影《我的朋友安德烈》近日上映&#xff0c;靠着观众的口碑口口相传&#xff0c;让这部电影成了这个季节最“意难平”的电影。走出影院的观众都说&#xff1a;“这片子后劲儿太大了&#xff01;”电影中最让人难忘的一幕&#xff0c;莫过于小李默和父亲一起吃饺子的那场戏。没…

创客匠人 AI 智能体:知识变现的资产化革命,让 IP 价值实现复利增长

在知识付费行业&#xff0c;多数创始人 IP 面临 “增长不可持续” 的困境&#xff1a;课程更新依赖个人精力&#xff0c;用户资产难以沉淀&#xff0c;一旦停止投入&#xff0c;业务便陷入停滞。这一困境的核心&#xff0c;是知识变现的价值形态仍停留在 “单次服务” 层面&…

[特殊字符]_内存管理深度解析:如何避免GC导致的性能陷阱[20260120171107]

作为一名经历过无数性能调优案例的工程师&#xff0c;我深知内存管理对Web应用性能的影响有多大。在最近的一个项目中&#xff0c;我们遇到了一个棘手的性能问题&#xff1a;系统在高并发下会出现周期性的延迟飙升&#xff0c;经过深入分析&#xff0c;发现问题根源竟然是垃圾回…

M3芯片MacBook真的支持多显示器吗?全方位解析与解决方案

苹果于2023年10月30日发布M3芯片&#xff0c;为MacBook产品线带来显著的性能升级和新功能。对于依赖多显示器进行工作、游戏或创意项目的用户来说&#xff0c;最关心的问题莫过于&#xff1a;M3芯片是否支持外接显示器&#xff1f;如果能&#xff0c;又能支持多少台&#xff1f…

[特殊字符]_内存管理深度解析:如何避免GC导致的性能陷阱[20260120171703]

作为一名经历过无数性能调优案例的工程师&#xff0c;我深知内存管理对Web应用性能的影响有多大。在最近的一个项目中&#xff0c;我们遇到了一个棘手的性能问题&#xff1a;系统在高并发下会出现周期性的延迟飙升&#xff0c;经过深入分析&#xff0c;发现问题根源竟然是垃圾回…

霍尼韦尔模块8C-PDOD51

核心概述8C-PDOD51 是霍尼韦尔 Experion LS 和 PlantCruise 系统&#xff08;基于C300控制器平台&#xff09;中的一员。它是一个可组态的、8通道、数字量输出&#xff08;DO&#xff09;模块&#xff0c;用于驱动现场设备&#xff0c;如继电器、电磁阀、指示灯、电机启动器等。…

基于小程序中医食谱推荐系统的设计(源码+论文+部署+安装)

感兴趣的可以先收藏起来&#xff0c;还有在毕设选题&#xff0c;项目以及论文编写等相关问题都可以给我留言咨询&#xff0c;我会一一回复&#xff0c;希望可以帮到大家。一、程序背景随着现代生活节奏加快&#xff0c;人们饮食习惯愈发不规律&#xff0c;高热量、低营养食物摄…

创客匠人 + AI 智能体:创始人 IP 变现的效率革命,知识变现进入自动化时代

2025 年&#xff0c;我国知识付费行业市场规模已逼近 3000 亿元&#xff0c;用户规模达 6.4 亿人。但繁华背后&#xff0c;71.7% 的受访青年将内容质量视为选择核心&#xff0c;69% 的用户抱怨内容参差不齐&#xff0c;54.3% 吐槽缺乏后续服务。当知识付费告别野蛮生长&#xf…

解决 npm ERR! code EINTEGRITY 报错的 3 种方法(亲测有效)

在使用 npm 安装依赖时&#xff0c;很多人都会遇到这样一个报错&#xff1a; npm ERR! code EINTEGRITY npm ERR! sha512-xxxx integrity checksum failed表面看是“完整性校验失败”&#xff0c;但真正原因并不止一个。 如果你只是反复 npm install&#xff0c;大概率会一直失…

Java:Gradle 5.0

Gradle 5.0 是一个在性能、依赖管理和开发体验方面都有显著提升的版本&#xff0c;被认为是 Gradle 历史上最快、最强大的发布版本之一‌。 1、主要特性与改进包括&#xff1a;‌更快的构建速度‌&#xff1a;引入了改进的增量编译和增量注解处理功能&#xff0c;使得 Java 编译…

花16800元买线索,不如花768元找老板

在B2B的销售与采购这个领域里面&#xff0c;正在上演着一个极其残酷的情况&#xff1a; 有非常多的企业&#xff0c;每一年都会花费上万元去订阅那些价格昂贵的拓客系统&#xff0c;像探迹、励销云这些都属于此类&#xff0c;然而他们拿到的却只是大量没有用处的名单。 这些名单…

计算机毕业设计springboot数码潮玩众筹社区平台app 基于SpringBoot的潮流数码众筹与玩家社区移动平台 面向Z世代的SpringBoot潮品众筹交流一体化App

计算机毕业设计springboot数码潮玩众筹社区平台appg368w &#xff08;配套有源码 程序 mysql数据库 论文&#xff09; 本套源码可以在文本联xi,先看具体系统功能演示视频领取&#xff0c;可分享源码参考。当“潮玩”从小众收藏跃升为千亿级赛道&#xff0c;传统电商的货架模式已…

一句话生成爬虫脚本?亮数据API超全演示,轻松搞定网页数据抓

一句话生成爬虫脚本&#xff1f;亮数据API超全演示&#xff0c;轻松搞定网页数据抓亮亮数据官网https://www.bright.cn/products/crawl-api/?utm_sourcebrand&utm_campaignbrnd-mkt_cn_csdn_thjs202601&promobrd2026 亮数据公众号https://bbs.csdn.net/topics/6200742…