Java 教程
- Java – 首页
- Java – 概述
- Java – 历史
- Java – 特性
- Java 与 C++
- JVM – Java 虚拟机
- Java – JDK 与 JRE 与 JVM
- Java – Hello World 程序
- Java – 环境设置
- Java – 基本语法
- Java – 变量类型
- Java – 数据类型
- Java – 类型转换
- Java – Unicode 系统
- Java – 基本运算符
- Java – 注释
- Java – 用户输入
- Java – 日期和时间
Java 控制语句
- Java – 循环控制
- Java – 决策制定
- Java – if-else
- Java – switch
- Java – for 循环
- Java – for-each 循环
- Java – while 循环
- Java – do-while 循环
- Java – break
- Java – continue
面向对象编程
- Java – OOPs 概念
- Java – 对象和类
- Java – 类属性
- Java – 类方法
- Java – 方法
- Java – 变量作用域
- Java – 构造函数
- Java – 访问修饰符
- Java – 继承
- Java – 聚合
- Java – 多态性
- Java – 重写
- Java – 方法重载
- Java – 动态绑定
- Java – 静态绑定
- Java – 实例初始化块
- Java – 抽象
- Java – 封装
- Java – 接口
- Java – 包
- Java – 内部类
- Java – 静态类
- Java – 匿名类
- Java – 单例类
- Java – 包装类
- Java – 枚举
- Java – 枚举构造函数
- Java – 枚举字符串
Java 内置类
Java 文件处理
Java 错误和异常
- Java – 异常
- Java – try-catch 块
- Java – try-with-resources
- Java – 多重 catch 块
- Java – 嵌套 try 块
- Java – finally 块
- Java – throw 异常
- Java – 异常传播
- Java – 内置异常
- Java – 自定义异常
Java 多线程
- Java – 多线程
- Java – 线程生命周期
- Java – 创建线程
- Java – 启动线程
- Java – 线程连接
- Java – 线程命名
- Java – 线程调度器
- Java – 线程池
- Java – 主线程
- Java – 线程优先级
- Java – 守护线程
- Java – 线程组
- Java – 关闭钩子
Java 同步
Java 网络编程
- Java – 网络编程
- Java – Socket 编程
- Java – URL 处理
- Java – URL 类
- Java – URLConnection 类
- Java – HttpURLConnection 类
- Java – Socket 类
- Java –泛型
Java 集合
Java 接口
Java 数据结构
Java 集合算法
高级 Java
- Java – 命令行参数
- Java – Lambda 表达式
- Java – 发送邮件
- Java – Applet 基础
- Java – Javadoc 注释
- Java – 自动装箱和拆箱
- Java – 文件不匹配方法
- Java – REPL (JShell)
- Java – 多版本 Jar 文件
- Java – 私有接口方法
- Java – 内部类菱形运算符
- Java – 多分辨率图像 API
- Java – 集合工厂方法
- Java – 模块系统
- Java – Nashorn JavaScript
- Java – Optional 类
- Java – 方法引用
- Java – 函数式接口
- Java – 默认方法
- Java – Base64 编码解码
- Java – switch 表达式
- Java – Teeing 收集器
- Java – 微基准测试
- Java – 文本块
- Java – 动态 CDS 归档
- Java – Z 垃圾收集器 (ZGC)
- Java – 空指针异常
- Java – 打包工具
- Java – 密封类
- Java – 记录类
- Java – 隐藏类
- Java – 模式匹配
- Java – 简洁数字格式化
- Java – 垃圾回收
- Java – JIT 编译器
Java 杂项
- Java – 递归
- Java – 正则表达式
- Java – 序列化
- Java – 字符串
- Java – Process API 改进
- Java – Stream API 改进
- Java – 增强的 @Deprecated 注解
- Java – CompletableFuture API 改进
- Java – 流
- Java – 日期时间 API
- Java 8 – 新特性
- Java 9 – 新特性
- Java 10 – 新特性
- Java 11 – 新特性
- Java 12 – 新特性
- Java 13 – 新特性
- Java 14 – 新特性
- Java 15 – 新特性
- Java 16 – 新特性
Java APIs 和框架
Java 类引用
- Java – Scanner
- Java – 数组
- Java – 字符串
- Java – Date
- Java – ArrayList
- Java – Vector
- Java – Stack
- Java – PriorityQueue
- Java – LinkedList
- Java – ArrayDeque
- Java – HashMap
- Java – LinkedHashMap
- Java – WeakHashMap
- Java – EnumMap
- Java – TreeMap
- Java – IdentityHashMap
- Java – HashSet
- Java – EnumSet
- Java – LinkedHashSet
- Java – TreeSet
- Java – BitSet
- Java – Dictionary
- Java – Hashtable
- Java – Properties
- Java – Collection
- Java – Array
Java 有用资源
Java – 如何使用迭代器?
通常,您可能希望循环遍历集合中的元素。例如,您可能希望显示每个元素。最简单的方法是使用迭代器,迭代器是一个实现 Iterator 或 ListIterator 接口的对象。
迭代器使您可以循环遍历集合,获取或删除元素。ListIterator 扩展了 Iterator,允许双向遍历列表并修改元素。
在您可以通过迭代器访问集合之前,必须先获取一个迭代器。每个集合类都提供了一个 iterator() 方法,该方法返回指向集合开头的迭代器。通过使用此迭代器对象,您可以一次访问集合中的每个元素。
通常,要使用迭代器循环遍历集合的内容,请遵循以下步骤:
通过调用集合的 iterator() 方法,获取指向集合开头的迭代器。
设置一个循环,该循环调用 hasNext()。只要 hasNext() 返回 true,循环就继续迭代。
在循环内,通过调用 next() 获取每个元素。
对于实现 List 的集合,您还可以通过调用 ListIterator 获取迭代器。
迭代器声明的方法
序号 | 方法和描述 |
---|---|
1 | boolean hasNext() 如果有更多元素,则返回 true。否则,返回 false。 |
2 | Object next() 返回下一个元素。如果没有下一个元素,则抛出 NoSuchElementException。 |
3 | void remove() 删除当前元素。如果尝试调用 remove() 之前没有调用 next(),则抛出 IllegalStateException。 |
ListIterator 声明的方法
序号 | 方法和描述 |
---|---|
1 | void add(Object obj) 在 next() 的下一次调用将返回的元素前面,将 obj 插入列表中。 |
2 | boolean hasNext() 如果有下一个元素,则返回 true。否则,返回 false。 |
3 | boolean hasPrevious() 如果有前一个元素,则返回 true。否则,返回 false。 |
4 | Object next() 返回下一个元素。如果没有下一个元素,则抛出 NoSuchElementException。 |
5 | int nextIndex() 返回下一个元素的索引。如果没有下一个元素,则返回列表的大小。 |
6 | Object previous() 返回前一个元素。如果没有前一个元素,则抛出 NoSuchElementException。 |
7 | int previousIndex() 返回前一个元素的索引。如果没有前一个元素,则返回 -1。 |
8 | void remove() 从列表中删除当前元素。如果在调用 next() 或 previous() 之前调用 remove(),则抛出 IllegalStateException。 |
9 | void set(Object obj) 将 obj 分配给当前元素。这是最后一次通过调用 next() 或 previous() 返回的元素。 |
示例 1
这是一个演示迭代器的示例。它使用 ArrayList 对象,但一般原则适用于任何类型的集合。
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class IteratorDemo { public static void main(String args[]) { // Create an array list List<String> al = new ArrayList<>(); // add elements to the array list al.add("C"); al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); // Use iterator to display contents of al System.out.print("Original contents of al: "); Iterator<String> itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); } }
输出
Original contents of al: C A E B D F
示例 2
这是一个演示 ListIterator 的示例。它使用 ArrayList 对象,但一般原则适用于任何类型的集合。
当然,ListIterator 仅适用于实现List 接口的那些集合。
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class IteratorDemo { public static void main(String args[]) { // Create an array list List<String> al = new ArrayList<>(); // add elements to the array list al.add("C"); al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); // Use iterator to display contents of al System.out.print("Original contents of al: "); Iterator<String> itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } } }
输出
Original contents of al: C A E B D F
示例 3
这是一个演示 ListIterator 在迭代时修改列表的示例。它使用 ArrayList 对象,但一般原则适用于任何类型的集合。
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.ListIterator; public class IteratorDemo { public static void main(String args[]) { // Create an array list List<String> al = new ArrayList<>(); // add elements to the array list al.add("C"); al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); // Use iterator to display contents of al System.out.print("Original contents of al: "); Iterator<String> itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); // Modify objects being iterated ListIterator<String> litr = al.listIterator(); while(litr.hasNext()) { Object element = litr.next(); litr.set(element + "+"); } System.out.print("Modified contents of al: "); itr = al.iterator(); while(itr.hasNext()) { Object element = itr.next(); System.out.print(element + " "); } System.out.println(); // Now, display the list backwards System.out.print("Modified list backwards: "); while(litr.hasPrevious()) { Object element = litr.previous(); System.out.print(element + " "); } System.out.println(); } }
输出
Original contents of al: C A E B D F Modified contents of al: C+ A+ E+ B+ D+ F+ Modified list backwards: F+ D+ B+ E+ A+ C+