Iterator
是 Java 集合框架中用来遍历集合(Collection)和 Map 的元素的接口。它提供了一种标准的方式来顺序访问集合中的每个元素,而不需要关心集合的内部结构。
如何使用 Iterator
-
获取
Iterator
实例: 通过调用集合的iterator()
方法来获取一个Iterator
实例。List<String> list = new ArrayList<>(); list.add("Element 1"); list.add("Element 2"); list.add("Element 3");Iterator<String> iterator = list.iterator();
-
使用
hasNext()
方法检查是否还有下一个元素: 在调用next()
方法之前,可以使用hasNext()
方法检查集合中是否还有更多的元素。while (iterator.hasNext()) {String element = iterator.next();System.out.println(element); }
-
使用
next()
方法获取下一个元素:next()
方法返回集合中的下一个元素。 -
使用
remove()
方法删除当前元素:Iterator
还提供了remove()
方法,它在调用next()
方法之后删除最后一个返回的元素。注意,remove()
必须在next()
调用之后使用,否则会抛出IllegalStateException
。while (iterator.hasNext()) {String element = iterator.next();if (element.equals("Element 2")) {iterator.remove(); // 删除当前遍历到的元素} }
Iterator
的特点
-
元素安全删除:
Iterator
提供了一种安全的方法在遍历过程中删除元素,这在for-each
循环中是不允许的。 -
避免
ConcurrentModificationException
: 使用Iterator
可以在遍历过程中安全地修改集合,避免抛出ConcurrentModificationException
。 -
只读或可变: 根据集合的不同,
Iterator
可以是只读的或可变的。例如,通过Arrays.asList()
返回的列表的Iterator
是只读的,而通过ArrayList
返回的Iterator
是可变的。 -
支持快速失败:
Iterator
支持快速失败机制,这意味着如果在多线程环境中,一个线程在遍历集合的同时另一个线程修改了集合的结构(增加了或删除了元素),则Iterator
会立即抛出ConcurrentModificationException
。 -
迭代器的弱一致性:
Iterator
提供弱一致性保证,即它返回的元素视图是遍历开始时的一个一致性快照,但在遍历过程中,任何对集合的修改都不会反映在迭代器上。 -
泛型支持:
Iterator
接口在Java 5中被更新以支持泛型,这样可以确保类型安全。
使用 Iterator
是处理Java集合的一种灵活方式,它提供了一种标准化的方法来遍历集合,同时允许在遍历过程中进行元素的删除。