Java枚举/迭代器的使用

Java枚举/迭代器的使用,java,vector,iterator,enumeration,Java,Vector,Iterator,Enumeration,我只是在API中漫游,我注意到,枚举和迭代器不是非常有用的接口 具体地说,我的意思不是说(对于向量v): for(枚举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(int i=0;i

我只是在API中漫游,我注意到,枚举和迭代器不是非常有用的接口

具体地说,我的意思不是说(对于向量v):

for(枚举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(int i=0;i
我想知道的是:

使用枚举/迭代器是否会提高性能


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

我认为迭代器和枚举与性能无关;它们是关于更好的抽象


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

我认为迭代器和枚举与性能无关;它们是关于更好的抽象


如果您有迭代器,则不需要了解任何有关底层数据结构的信息。这就是为什么我认为这个接口是完全可以接受的。我不同意你说迭代器不是一个有用的接口。您将添加哪些方法?

除了枚举器和迭代器更好地表达您在尝试遍历集合中的值时尝试执行的操作,并抽象出duffymo提到的特定集合类型的细节之外,迭代器接口允许您对
语法使用更加优雅的
,例如:

List<String> list = new ArrayList<String>();
for(String entry : list)
{
    System.out.println(list);
}
List List=new ArrayList();
for(字符串条目:列表)
{
系统输出打印项次(列表);
}

除了枚举器和迭代器更擅长表示在尝试遍历集合中的值时要执行的操作,并抽象出duffymo提到的特定集合类型的细节之外,迭代器接口允许您对
语法使用更加优雅的
,例如:

List<String> list = new ArrayList<String>();
for(String entry : list)
{
    System.out.println(list);
}
List List=new ArrayList();
for(字符串条目:列表)
{
系统输出打印项次(列表);
}

并非所有具有
迭代器的对象都是随机访问
列表
。例如,
不允许索引访问。一个
LinkedList
允许它,但是按索引循环会有糟糕的性能

其他根本不是
集合
的东西有
迭代器
s,或者也可以表示为
迭代器
。例如,可以使用
迭代器
表示无限序列

拥有一个简单的、通用的、用于迭代事物的接口,允许使用能够在尽可能广泛的对象上操作的方法


另一方面,
向量
枚举
都已经过时,在现代Java中基本上分别被
数组列表
迭代器
所取代。

并不是所有有
迭代器的东西都是随机访问
列表
。例如,
不允许索引访问。一个
LinkedList
允许它,但是按索引循环会有糟糕的性能

其他根本不是
集合
的东西有
迭代器
s,或者也可以表示为
迭代器
。例如,可以使用
迭代器
表示无限序列

拥有一个简单的、通用的、用于迭代事物的接口,允许使用能够在尽可能广泛的对象上操作的方法


另外,
Vector
Enumeration
都已经过时,在现代Java中基本上分别被
ArrayList
Iterator
所取代。

在使用Iterator.hasNext()方法进行迭代时修改列表是安全的。如果只检查索引是否小于原始大小,可能会遇到问题…

在使用Iterator.hasNext()方法进行迭代时修改列表是安全的。如果只检查索引是否小于原始大小,可能会遇到问题。

迭代器是关于解耦和封装的。您不需要关心数据结构的差异,迭代器有唯一的API要公开。因此,即使集合发生了更改,客户机代码也不需要太多重构。
在JDK1.5之前,我们使用接口来管理一些静态的final字段。您可以通过编写一些示例代码来比较它们(例如,enum支持switch)。

迭代器是关于解耦和封装的。您不需要关心数据结构的差异,迭代器有唯一的API要公开。因此,即使集合发生了更改,客户机代码也不需要太多重构。
在JDK1.5之前,我们使用接口来管理一些静态的final字段。您可以通过编写一些示例代码来比较它们-(例如,枚举支持开关)

如果您有一个链表而不是向量,该怎么办?想一想.elementAt(i)在这种情况下会做什么。因此,这可能会影响性能,首先使用LinkedList,而不是Vector(LinkedList比Vector快),如果您使用的是一个链接列表而不是Vector呢?想一想.elementAt(i)在这种情况下会做什么。所以这可能会影响性能,首先使用LinkedList,而不是Vector(LinkedList比Vector快)。迭代器有remove()方法,但还有removeElementAt()?但根据我从您的答案中了解,不必知道任何关于底层数据结构的信息是非常有意义的,特别是当您与其他人协作(使用OOP)时,迭代器将被证明是非常有用的。但无论如何,如果我自己制作一个程序,我应该有