您的位置:首页 > 理论基础 > 数据结构算法

java 中的JDK封装的数据结构和算法解析(集合类)----链表 List 之 Vector (向量)

2016-01-20 10:42 519 查看
Vector 看JDK解释(中文翻译)吧:

Vector
类可以实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,
Vector
的大小可以根据需要增大或缩小,以适应创建
Vector
后进行添加或移除项的操作。

每个向量会试图通过维护
capacity
capacityIncrement
来优化存储管理。
capacity
始终至少应与向量的大小相等;这个值通常比后者大些,因为随着将组件添加到向量中,其存储将按
capacityIncrement
的大小增加存储块。应用程序可以在插入大量组件前增加向量的容量;这样就减少了增加的重分配的量。

由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失败的:如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的 remove 或 add 方法之外的任何其他方式),则迭代器将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就完全失败,而不是冒着在将来不确定的时间任意发生不确定行为的风险。Vector 的 elements 方法返回的 Enumeration 不是 快速失败的。

注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出
ConcurrentModificationException
。因此,编写依赖于此异常的程序的方式是错误的,正确做法是:迭代器的快速失败行为应该仅用于检测 bug。

从 Java 2 平台 v1.2 开始,此类改进为可以实现
List
接口,使它成为 Java Collections Framework 的成员。与新 collection 实现不同,
Vector
是同步的。

下面主要分析Vector的数据结构和快速失败行为

由于Vector的数据结构和ArrayList的数据结构差不多,所以这里以快速失败的原因分析为主,对于Vector的算法这里略讲:

Vector的数据结构:



构造方法:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: