com*_*tta 115 java collections iterator enumeration
这两个接口之间的确切区别是什么?是否Enumeration有过使用效益Iterator?如果有人可以详细说明,那么参考文章将不胜感激.
coo*_*ird 140
查看Iterator接口的Java API规范,可以解释以下两者之间的差异Enumeration:
迭代器在两个方面与枚举不同:
- 迭代器允许调用者在迭代期间使用定义良好的语义从底层集合中删除元素.
- 方法名称已得到改进.
底线是,Enumeration并且Iterator将给出连续的元素,但是Iterator以这样的方式改进,因此方法名称更短,并且具有另外的remove方法.这是一个并排比较:
Enumeration Iterator
---------------- ----------------
hasMoreElement() hasNext()
nextElement() next()
N/A remove()
Run Code Online (Sandbox Code Playgroud)
正如Java API规范中所提到的,对于较新的程序,Iterator应该优先考虑Enumeration,因为"Iterator取代了Java集合框架中的Enumeration".(从Iterator规格.)
sha*_*ILU 35
迭代器快速失败.即当一个线程通过添加/删除操作更改集合,而另一个线程通过Iterator使用hasNext() or next()方法遍历它时,迭代器通过抛出快速失败ConcurrentModificationException.迭代器的快速失败行为只能用于检测错误.像Hashtable,Vector这样的类的方法返回的枚举不是快速失败的,这是通过同步nextElement()锁定当前Vector对象的方法中的代码块来实现的,这需要花费大量时间.
Uri*_*Uri 11
"正式",它们应该与支持额外操作(例如,删除)的迭代器接口类似.通常,趋势是使用迭代器.
这是来自枚举接口javadocs:
注意:此接口的功能由Iterator接口复制.此外,Iterator添加了一个可选的删除操作,并且具有更短的方法名称.新实现应考虑使用Iterator而不是Enumeration.
枚举和迭代器有三个基本区别
枚举
1.它仅用于延迟类(例如Vector)
Enumeration e = v.elements();
v is the object of `Vector` class
Run Code Online (Sandbox Code Playgroud)
2.可以执行读操作,我们不能删除元素.
3.有两种方法可供选择
迭代器
它适用于所有Collection
Iterator itr = c.iterator();
where c is any `Collection` class
Run Code Online (Sandbox Code Playgroud)可以执行读取和删除操作
有三种方法可供选择
Limition两个
Add object和Replace object