使用Java枚举/迭代器

问题描述

| 我只是在API上漫游,我注意到,Enumerations和Iterators并不是非常有用的接口。 具体来说,我的意思不是说(针对向量v):
for (Enumeration<E> e = v.elements(); e.hasMoreElements();)
   System.out.println(e.nextElement());
我们可以轻松地说:
for (int i = 0; i < v.size(); i++)
   System.out.println(v.elementAt(i));
我想确切知道的是: 使用枚举/迭代器是否有任何性能提升? 它是否为您提供了实现后者for loop无法实现的功能的能力?     

解决方法

我认为迭代器和枚举与性能无关;他们是关于更好的抽象。 如果您有迭代器,则无需了解基础数据结构。这就是为什么我认为该界面完全可以接受。我不同意您关于Iterator不是有用接口的说法。您将添加什么方法?     ,并非所有具有
Iterator
的事物都是随机访问
List
。例如,“ 4”不允许索引访问。
LinkedList
允许,但按索引循环将具有糟糕的性能。 根本不是ѭ6的其他事物都具有
Iterator
,或者也可以表示为
Iterator
。例如,可以用
Iterator
表示无限序列。 具有用于迭代过程的简单,通用接口,可以使方法可以对尽可能多的对象进行操作。 顺便说一句,ѭ10和ѭ11都已过时,并且在现代Java中基本上已分别由ѭ12和ѭ2代替。     ,除了以下事实:枚举器和迭代器更擅长表达您试图遍历集合中的值时要尝试执行的操作,并像duffymo所述抽象出特定集合类型的细节,Iterator接口还允许您使用更优雅的
for
语法,例如:
List<String> list = new ArrayList<String>();
for(String entry : list)
{
    System.out.println(list);
}
    ,使用Iterator.hasNext()方法进行迭代时,可以安全地修改列表。如果仅检查索引是否小于原始大小,则可能会遇到问题...     ,迭代器是关于解耦和封装的。您无需关心数据结构的差异,迭代器具有要公开的独特API。结果,即使收集发生了变化,客户端代码也不需要太多的重构。 在jdk 1.5之前,我们使用interface管理一些静态的final字段。您可以通过编写一些示例代码进行比较-(例如,枚举支持开关)