本文是讲Java的集合中比较器和迭代器的使用,还会涉及到其他遍历集合的方法,包括增强for结构和聚合操作。
一、遍历集合
1、Iterator概述
(1)Iterator的子接口及其继承关系
Iterator接口的子接口如下:
ListIterator, PrimitiveIterator<T,T_CONS>, PrimitiveIterator.OfDouble, PrimitiveIterator.OfInt, PrimitiveIterator.OfLong, XMLEventReader
Iterator 是 Java 迭代器最简单的实现,ListIterator 是 Collection API 中的接口, 它扩展了 Iterator 接口。其继承关系如下图所示:
通常情况下,你会希望遍历一个集合中的元素。例如,显示集合中的每个元素。
一般遍历数组都是采用for循环或者增强for,这两个方法也可以用在集合框架,但是还有一种方法是采用迭代器遍历集合框架,它是一个对象,实现了Iterator 接口或 ListIterator接口。
迭代器,使我们能够通过循环来得到或删除集合的元素。ListIterator 继承了 Iterator,以允许双向遍历列表和修改元素。
Java Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法,可用于迭代 ArrayList和 HashSet等集合。
(2)Iterator方法
修饰符/类型 | 方法名称 | 描述 |
---|---|---|
default void | forEachRemaining(Consumer<? super E> action) | 对剩余的每个元素执行给定的操作,直到所有元素都已处理或该操作引发异常。 |
boolean | hasNext() | 如果迭代有更多元素,则返回“ true”。 |
E | next() | 返回迭代中的下一个元素。 |
default void | remove() | 从基础集合中移除此迭代器返回的最后一个元素 |
集合中的迭代器, 在Java Collections Framework中,迭代器代替了枚举。 迭代器与枚举有以下两种不同:
- 迭代器允许调用者在迭代期间使用定义明确的语义从基础集合中删除元素。
- 方法名称得到了改进。
2、Iterator的应用
(1)获取一个迭代器
- 导入迭代器
Iterator 类位于 java.util 包中,使用前需要引入它,语法格式如下:
import java.util.Iterator; // 引入 Iterator 类
- 获取迭代器
// 引入 ArrayList 和 Iterator 类
import java.util.ArrayList;
import java.util.Iterator;
public class RunoobTest {
public static void main(String[] args) {
// 创建集合
ArrayList<String> sites = new ArrayList<String>();
sites.add("Google");
sites.add("Runoob");
sites.add("Taobao");
sites.add("Zhihu");
// 获取迭代器
Iterator<String> it = sites.iterator();
// 输出集合中的第一个元素
System.out.println(it.next());
}
Console:
Google
(2)迭代器遍历集合的应用
实例1:循环集合元素
让迭代器 it 逐个返回集合中所有元素最简单的方法是使用 while 循环:
while(it.hasNext()) {
System.out.println(it.next(