——- android培训、java培训、期待与您交流! ———-
查阅API,得到Vector的基本信息。
public class Vector
extends AbstractList
implements List, RandomAccess, Cloneable, Serializable
Vector 类可以实现可增长的对象数组。
与数组一样,它包含可以使用整数索引进行访问的组件。
但是,Vector 的大小可以根据需要增大或缩小,
以适应创建 Vector 后进行添加或移除项的操作。
为什么Vector使用枚举而不是迭代器??
由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失败的:
如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的 remove 或 add 方法之外的任何其他方式),
则迭代器将抛出 ConcurrentModificationException。
因此,面对并发的修改,迭代器很快就完全失败,
而不是冒着在将来不确定的时间任意发生不确定行为的风险。
Vector 的 elements 方法返回的 Enumeration 不是 快速失败的。
注意,迭代器的快速失败行为不能得到保证,一般来说,
存在不同步的并发修改时,不可能作出任何坚决的保证。
快速失败迭代器尽最大努力抛出 ConcurrentModificationException。
因此,编写依赖于此异常的程序的方式是错误的,
正确做法是:迭代器的快速失败行为应该仅用于检测 bug。
从 Java 2 平台 v1.2 开始,此类改进为可以实现 List 接口,
使它成为 Java Collections Framework 的成员。
与新 collection 实现不同,Vector 是同步的。
而枚举是怎么样的呢?
接口 Enumeration
实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。
连续调用 nextElement 方法将返回一系列的连续元素。
注:此接口的功能与 Iterator 接口的功能是重复的。
此外,Iterator 接口添加了一个可选的移除操作,并使用较短的方法名。
新的实现应该优先考虑使用 Iterator 接口而不是 Enumeration 接口。
枚举只有2个方法:
hasMoreElements()测试此枚举是否包含更多的元素。
类似于hasNext().
nextElement()如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
类似于next()
Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
枚举就是Vector特有的取出方式。
发现枚举和迭代器很像。
其实枚举和迭代是一样的。
因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
枚举郁郁而终了。
下面测试一下vector和枚举
import java.util.*;
class VectorDemo
{
public static void main(String[] args)
{
vectorEnumeration();
}
//测试Vector和枚举
public static void vectorEnumeration()
{
//创建一个向量
Vector v = new Vector();
//给向量添加元素
v.add("num01");
v.add("num02");
v.add("num03");
v.add("num04");
//创建枚举,类似于迭代器,使用枚举而不使用迭代器的原因上面已经解释过了
Enumeration en = v.elements();
//类似于迭代器,取出向量元素
while(en.hasMoreElements())
System.out.println(en.nextElement());
}
}
Vector和Enumeration演示结果