Enumeration 与 Iterator 有什么区别?
先说出你的答案
定义边界、关键机制、一个反例;P8题再补容量、失败与验证。
查看完整题解
参考回答
直接回答
Enumeration 是较早的遍历接口,主要提供 hasMoreElements 和 nextElement;Iterator 使用 hasNext 和 next,并提供可选的 remove,以及 forEachRemaining 等能力。现代集合通常采用 Iterator,但不能仅凭接口名字判断某个实现是否支持并发修改。
讲清原理
接口规定的是怎样访问元素,具体遍历期间发生修改会怎样,还要看实现。不能笼统地说“所有 Iterator 都 fail-fast,Enumeration 都安全”。Iterator.remove 也是可选操作,不支持时会抛 UnsupportedOperationException。
Java 的增强 for 通常依赖 Iterable.iterator,而不是直接依赖 Enumeration。维护旧 API 时可以使用 Enumeration.asIterator 适配遍历,但这个适配器不因此获得原实现没有的删除能力。
例子与易错点
var e = java.util.Collections.enumeration(java.util.List.of("A", "B"));
var it = e.asIterator();
while (it.hasNext()) System.out.println(it.next());
// 依次打印 A、B
选择接口时关注数据源、修改能力和具体语义,不要把“新接口”和“线程安全”画等号。
相关题:第 3 题、第 4 题。
和评分标准对照,你能独立回答到哪一步?
自评会安排下一次复习,不保存你的口述内容。
这道题,你掌握得怎么样?
掌握程度由你主动标记,阅读和收藏不会自动改变状态。