Iterator通过iterator()获取,使用hasNext()和next()遍历元素,可安全删除;其具备fail-fast机制、单向遍历、统一接口等特点,适用于List、Set等集合。
Iterator 是 Java 集合框架中用于遍历集合元素的一个接口,主要用在 List、Set、Queue 等集合类型中。它提供了一种统一的方式来访问集合中的元素,而不需要暴露集合的内部结构。
如何使用 Iterator?
使用 Iterator 的基本步骤如下:
- 通过集合的 iterator() 方法获取迭代器对象
- 使用 hasNext() 判断是否还有下一个元素
- 使用 next() 获取下一个元素
- 可选:使用 remove() 删除当前元素(不是所有实现都支持)
示例代码:
Listlist = new ArrayList<>(); list.add("apple"); list.add("banana"); list.add("orange"); Iterator it = list.iterator(); while (it.hasNext()) { String item = it.next(); System.out.println(item); // 如果需要,可以删除当前元素 if ("banana".equals(item)) { it.remove(); } }
Iterator 的特点
1. 安全性高(支持 fail-fast 机制)
大多数集合的 Iterator 是 fail-fast 的,意味着在迭代过程中如果集合被其他方式修改(如直接调用集合的 remove 或 add),会抛出 ConcurrentModificationException。这有助于及时发现并发修改问题。
2. 单向遍历
Iterator 只能从前往后遍历,不能倒序访问。如果需要反向遍历,可以使用 ListIterator(仅适用于 List)。
3. 支持删除操作
Iterator 的 remove() 方法可以在遍历过程中安全地删除当前元素,避免了边遍历边删除导致的异常。
4. 统一接口
无论底层是 ArrayList、LinkedList 还是 HashSet,都可以用 Iterator 遍历,提高了代码的通用性和可维护性。
5. 延迟加载(惰性计算)
Iterator 是逐步获取元素的,不会一次性加载所有数据,适合处理大数据集合。
注意事项
调用 next() 之前必须先调用 hasNext(),否则可能抛出 NoSuchElementException。
remove() 方法必须在调用 next() 之后调用,否则会抛出 IllegalStateException。
某些集合(如 Collections.unmodifiableCollection 返回的集合)的 Iterator 不支持 remove 操作,调用会抛出 UnsupportedOperationException。
基本上就这些,Iterator 简单但很实用,是遍历集合时推荐的方式之一。








