Vector & Enumeration

在 Java 1.0/1.1 中,Vector 是唯一可以自动扩展的序列,所以它被大量使用。它的缺点
多到这里都难以描述(可以参见本书的第一版,可从 www.BruceEckel.com 免费下载)。
基本上,可将其看作 ArrayList,但是具有又长又难记的方法名。在 Java 2 的容器类类库
中,Vector 被改造过,可将其规类为 Collection 和 List,所以下面的例子可以使用
Collection2.fill()方法。这样做有点不妥当,可能会让人误会 Vector 变得好用了,实际上
这样做只是为了支持 Java 2 之前的代码。


Java 1.0/1.1 版的迭代器,发明了一个新名字,“enumeration”,取代了为人熟知的
术语。此 Enumeration 接口比 Iterator 小,只有两个名字很长的方法:boolean
hasMoreElements( ) ,如果此 enumeration 包含有元素则返回 true;Object
nextElement( )返回此 enumeration 中的下一个元素,如果还有的话(否则抛出异常)。


Enumeration 只是接口而不是实现,所以有时新的类库仍然使用了旧的 Enumeration,
这令人十分遗憾,但通常不会造成伤害。虽然在你的代码中,应该尽量使用 Iterator,但
也得有所准备,类库可能会返回给你一个 Enumeration。


此外,你还可以通过使用 Collections.enumeration( )方法来从 Collection 生成一个
Enumeration,见下面的例子:
 






//: c11:Enumerations.java
// Java 1.0/1.1 Vector and Enumeration.
import java.util.*; 
import com.bruceeckel.util.*; 


public class Enumerations { 
public static void main(String[] args) { 
    Vector v = new Vector(); 
    Collections2.fill(v, Collections2.countries, 100);
    Enumeration e = v.elements();
while(e.hasMoreElements()) 
      System.out.println(e.nextElement()); 
// Produce an Enumeration from a Collection:
    e = Collections.enumeration(new ArrayList());
  }
} ///:~


Java 1.0/1.1 的 Vector 只有 addElement( )一个方法,fill( )中用到的 add( )方法,是
Vector 转换成 List 时新增加的。可以使用 elements( )生成 Enumeration,然后使用它
进行前序遍历。


最后一行代码创建了一个 ArrayList,并且使用 enumeration( )将 ArrayList 的 Iterator
转换成了 Enumeration。这样,即使有需要 Enumeration 的旧代码,你仍然可以使用新

容器。


你可能感兴趣的:(Vector & Enumeration)