美文网首页
Java Iterator、Enumeration

Java Iterator、Enumeration

作者: hei禹 | 来源:发表于2018-11-18 17:48 被阅读0次

    一、概述

    Enumeration和Iterator都在java.util包下,用于遍历Collection对象的元素

    二、区别

    1)简介

    Iterator是JDK 1.2引入的,Enumeration是JDK 1.0引入的

    2)remove()方法

    这是两者之间最主要的差别,Enumeration只支持遍历,不支持修改(remove)

    Iterator Enumeration
    hasNext() hasMoreElements()
    next() hasElement()
    remove() /
    3)老旧接口

    Enumeration是老旧接口,仅用于遍历老旧类如Vector、HashTable、Stack;而Iterator更通用

    4)Fail-Fast VS Fail-Safe
    • Iterator本质上是一种Fail-Fast, 即如果在迭代时修改集合而不是它自己的remove()方法,则抛出ConcurrentModificationException;
    • Enumeration在本质上是Fail-Safe的,如果在迭代时修改了集合,不会抛出任何异常
    5)安全可靠性

    由于Iterator本质上是Fail-Fast的,并且在迭代时不允许其他线程修改集合,因此它被认为比Enumeration更安全

    6)命名

    Iterator类名、函数名更简短

    三、如何选择

    根据Java API文档说明,始终应该优先使用Iterator

    四、Fail-Fast的额外说明

    • 发生Fail-Fast时抛出ConcurrentModificationException的行为不是在接口中定义的,它取决于Iterator的具体实现;
    • java.util.concurrent包下的collection类永远不会抛ConcurrentModificationException;
    • 请注意,无法保证Fail-fast的行为,因为一般来说,在存在不同步的并发修改时,不可能做出任何硬性保证。 Fail-Fast操作会尽最大努力抛出ConcurrentModificationException。 因此,编写依赖于此异常的程序以确保其正确性是错误的:ConcurrentModificationException应仅用于检测错误

    五、参考资料

    1. Differences Between Enumeration Vs Iterator In Java
    2. Enumeration.java和Iterator.java
    3. Difference between Java Enumeration and Iterator
    4. Class ConcurrentModificationException

    相关文章

      网友评论

          本文标题:Java Iterator、Enumeration

          本文链接:https://www.haomeiwen.com/subject/imvgfqtx.html