news 2026/6/15 15:39:42

java基础-Iterator 接口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 在简单遍历和某些特定场景下仍然非常有用。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 14:35:30

费雪的成长型投资策略

费雪的成长型投资策略 关键词:费雪、成长型投资策略、股票投资、公司分析、长期投资 摘要:本文深入探讨了费雪的成长型投资策略。详细介绍了该策略的背景,包括其目的、适用读者群体、文档结构和相关术语。阐述了成长型投资策略的核心概念,通过文本示意图和 Mermaid 流程图展…

作者头像 李华
网站建设 2026/6/15 14:35:57

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

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

作者头像 李华
网站建设 2026/6/9 17:37:51

告别走马观花!红松小课助推银发文旅向高品质“学游”升级

随着“活到老学到老”理念深入人心&#xff0c;银发群体的文旅需求正从“景观打卡”向“学游一体”深度转型。以退休生活兴趣社区红松为例&#xff0c;其凭借线上兴趣学习线下实景游学的创新模式&#xff0c;精准契合老年群体需求&#xff0c;不仅让万千老年学员实现了“游中求…

作者头像 李华
网站建设 2026/6/10 2:19:03

滴滴 wsgsig

声明 本文章中所有内容仅供学习交流使用&#xff0c;不用于其他任何目的&#xff0c;抓包内容、敏感网址、数据接口等均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由 此产生的一切后果均与作者无关&#xff01; 部分python代码 url "https:…

作者头像 李华
网站建设 2026/6/11 18:10:09

太香了!JNPF 国际化功能实操指南,高效管理多语言翻译

做国际化系统时&#xff0c;还在为多语言翻译维护头疼&#xff1f; 服务端内置翻译和客户端业务翻译分散管理、新增语言要逐处修改、批量导入容易出错&#xff1f; JNPF 国际化功能提供了一站式解决方案 —— 支持服务端与客户端翻译分类管理&#xff0c;可灵活新增、编辑、批…

作者头像 李华
网站建设 2026/6/15 14:33:51

如何将联系人从 Android 传输到 PC

失去联系人可能会带来很大的不便。无论您是要升级手机、备份数据&#xff0c;还是只是需要访问计算机上的联系人列表&#xff0c;了解如何将联系人从 Android 传输到 PC 总是很有用的。按照本指南&#xff0c;获得 6 个实用方法&#xff0c;然后轻松转移您的联系人。第 1 部分&…

作者头像 李华