A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© itheima_llt 高级黑马   /  2015-4-13 16:54  /  644 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

查阅API,得到Vector的基本信息。

public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, Serializable
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<E>
实现 Enumeration 接口的对象,它生成一系列元素,一次生成一个。
连续调用 nextElement 方法将返回一系列的连续元素。


注:此接口的功能与 Iterator 接口的功能是重复的。
此外,Iterator 接口添加了一个可选的移除操作,并使用较短的方法名。
新的实现应该优先考虑使用 Iterator 接口而不是 Enumeration 接口。
枚举只有2个方法:
hasMoreElements()测试此枚举是否包含更多的元素。
类似于hasNext().
nextElement()如果此枚举对象至少还有一个可提供的元素,则返回此枚举的下一个元素。
类似于next()



Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
枚举就是Vector特有的取出方式。
发现枚举和迭代器很像。
其实枚举和迭代是一样的。

因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
枚举郁郁而终了。

下面测试一下vector和枚举
  1. import java.util.*;
  2. class VectorDemo
  3. {
  4.         public static void main(String[] args)
  5.         {
  6.                 vectorEnumeration();
  7.         }

  8.         //测试Vector和枚举
  9.         public static void vectorEnumeration()
  10.         {
  11.                 //创建一个向量
  12.                 Vector v = new Vector();

  13.                 //给向量添加元素
  14.                 v.add("num01");
  15.                 v.add("num02");
  16.                 v.add("num03");
  17.                 v.add("num04");

  18.                 //创建枚举,类似于迭代器,使用枚举而不使用迭代器的原因上面已经解释过了
  19.                 Enumeration en = v.elements();

  20.                 //类似于迭代器,取出向量元素
  21.                 while(en.hasMoreElements())
  22.                         System.out.println(en.nextElement());
  23.         }

  24. }
复制代码




VectorEnumeration演示结果.jpg (78.55 KB, 下载次数: 13)

VectorEnumeration演示结果.jpg

2 个回复

倒序浏览
楼主,你的路径这么长,每次开机启动,输入路径不累吗{:2_34:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马