使用Java枚举/迭代器

Jim*_*uch 1 java iterator enumeration vector

我只是漫游API,我注意到,Enumerations和Iterators不是非常有用的接口.

具体来说,我的意思是,而不是说(对于Vector v):

for (Enumeration<E> e = v.elements(); e.hasMoreElements();)
   System.out.println(e.nextElement());
Run Code Online (Sandbox Code Playgroud)

我们可以很容易地说:

for (int i = 0; i < v.size(); i++)
   System.out.println(v.elementAt(i));
Run Code Online (Sandbox Code Playgroud)

我想知道的是:

使用Enumerations/Iterators是否有任何性能奖励?

它是否为您提供了实现后者循环无法实现的功能?

duf*_*ymo 7

我不认为迭代器和枚举是关于性能的; 他们是关于更好的抽象.

如果您有迭代器,则无需了解有关底层数据结构的任何信息.这就是我认为界面完全可以接受的原因.我不同意你的说法,即Iterator不是一个有用的界面.你会添加什么方法?


Col*_*inD 7

并非一切Iterator都是随机访问List.Set例如,A 不允许索引访问.A LinkedList允许它,但按索引循环会产生糟糕的性能.

其他根本不Collection具备Iterator的东西或者也可以表示为其他东西Iterator.例如,一个人可以用一个代表无限序列Iterator.

具有用于迭代事物的简单,通用接口允许可以在尽可能多的对象上操作的方法.

顺便说一句,无论是VectorEnumeration已经过时,已经基本在现代的Java替代ArrayListIterator分别.