首页 > 试题广场 >

Enumeration接口和Iterator接口的区别有哪些

[问答题]
Enumeration接口和Iterator接口的区别有哪些?
枚举速度快,占用内存少,但是不是快速失败的,线程不安全。迭代允许删除底层数据,枚举不行
发表于 2017-03-27 14:49:09 回复(4)

package java.util;

public interface Enumeration<E> {
    boolean hasMoreElements();
    E nextElement();
}
public interface Iterator<E> {
    boolean hasNext();
    E next();
    void remove();
}

(01) 函数接口不同
Enumeration 只有2个函数接口。 通过Enumeration,我们只能读取集合的数据,而不能对数据进行修改。
Iterator 只有3个函数接口。 Iterator除了能读取集合的数据之外,也能数据进行删除操作。

(02) Iterator 支持 fail-fast 机制,而 Enumeration 不支持
Enumeration JDK 1.0添加的接口。使用到它的函数包括VectorHashtable等类,这些类都是JDK 1.0中加入的,Enumeration存在的目的就是为它们提供遍历接口。Enumeration本身并没有支持同步,而在VectorHashtable实现Enumeration时,添加了同步。
Iterator JDK 1.2才添加的接口,它也是为了HashMapArrayList等集合提供遍历接口。Iterator是支持fail-fast机制的:当多个线程对同一个集合的内容进行操作时,就可能会产生fail-fast事件。

编辑于 2017-01-18 13:31:26 回复(5)
本题问的是“Enumeration接口和Iterator接口的区别 ”,所以主要是确定接口的区别,而不是各种实现的区别。因此,对于这两种接口来说,Iterator接口比Enumeration接口多了remove和forEachRemaining两种方法,仅此而已。
发表于 2016-12-25 23:26:00 回复(0)
能不复制粘贴,***,不知道别强答
发表于 2016-10-17 08:56:00 回复(2)


iterator是快速失败的,当你在遍历的时候,如果另起一个线程来修改它(集合的内容)的结构,这时迭代器会立马感知到,引起快速失败,抛出ConcurrentModificationException异常。
所以说iterator 是安全的
发表于 2016-12-09 16:52:09 回复(1)

枚举占用内存少,速度快,但不是线程安全的,不能达到快速失败,迭代器不能允许别的线程修改正在遍历的集合,拥有一个修改集合底层元素得方法remove

编辑于 2018-08-05 09:37:15 回复(0)
zll头像 zll
Enumration接口的速度是Iterator的2倍,并且占用更少的内存。但Eunmration远远没有Iterator安全这是因为线程不能够修改Iterator正在遍历的集合中的对象。另外,iteration允许调用者删除底层集合中的元素,这对Enumration是不可能的。
发表于 2016-03-19 20:25:19 回复(2)
2倍速度是为什么
发表于 2021-03-29 12:37:33 回复(0)
<p>一个枚举,一个迭代器,一个线程安全,一个效率高。一个可删除底层集合元素,一个不能</p><p><br></p>
发表于 2020-05-15 08:46:12 回复(0)

Enumeration是快速失败,iteration是失败安全。前者占用空间少,速度快,但不安全。

发表于 2020-03-02 21:41:14 回复(0)
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。
发表于 2019-04-29 22:02:41 回复(0)
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。
发表于 2019-04-28 16:40:34 回复(0)
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。
发表于 2019-04-27 21:00:38 回复(0)

Enumeration是Iterator的两倍同时占用更少的内存 但是Iterator远远比他安全


发表于 2019-04-26 22:26:52 回复(0)
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。
发表于 2019-04-25 18:37:05 回复(0)
Enumeration的速度大约是Iterator的两倍,同时所需的内存也比Iterator远远低。但是Iterator更安全,支持快速失败,如果正在遍历的对象发生修改,则会马上抛出异常。而且Iterator支持删除底层元素,而Enumeration则不支持
编辑于 2018-05-08 08:08:19 回复(0)
Enumeration为HashTable和Vector提供迭代,它只支持查找而不支持修改集合,需要加入同步才能实现线程同步;Iterator为其他集合类使用,除了能查找元素还能对底层集合进行删除,它是快速失败机制因此比Enumeration安全,Enumeration速度是Iterator的2倍,且占用更少内存
发表于 2018-03-14 14:59:32 回复(0)
迭代器是快速失败的,而枚举不是,这个是解释用前者不用后者的地方。
发表于 2016-08-04 06:36:26 回复(0)
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。
发表于 2016-03-12 11:23:42 回复(1)
Enumeration速度是Iterator的2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。
发表于 2015-10-29 12:10:41 回复(0)