java 中的JDK封装的数据结构和算法解析(集合类)----链表 List 之 Vector (向量)
2016-01-20 10:42
519 查看
Vector 看JDK解释(中文翻译)吧:
每个向量会试图通过维护
由 Vector 的 iterator 和 listIterator 方法所返回的迭代器是快速失败的:如果在迭代器创建后的任意时间从结构上修改了向量(通过迭代器自身的 remove 或 add 方法之外的任何其他方式),则迭代器将抛出 ConcurrentModificationException。因此,面对并发的修改,迭代器很快就完全失败,而不是冒着在将来不确定的时间任意发生不确定行为的风险。Vector 的 elements 方法返回的 Enumeration 不是 快速失败的。
注意,迭代器的快速失败行为不能得到保证,一般来说,存在不同步的并发修改时,不可能作出任何坚决的保证。快速失败迭代器尽最大努力抛出
从 Java 2 平台 v1.2 开始,此类改进为可以实现
下面主要分析Vector的数据结构和快速失败行为
由于Vector的数据结构和ArrayList的数据结构差不多,所以这里以快速失败的原因分析为主,对于Vector的算法这里略讲:
Vector的数据结构:
构造方法:
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的数据结构:
构造方法:
相关文章推荐
- 数据结构:线性表的链式存储
- 数据结构:线性表的顺序存储
- java 实现数据结构之线性表
- 数据结构实现之Bag背包
- 学习笔记------数据结构(C语言版)栈应用 括号匹配
- 优先队列——斜堆
- 算法与数据结构学习资源大搜罗——良心推荐
- 树的重心求法POJ3107
- 学习笔记------数据结构(C语言版)进制转换
- 使用XML文件输入和输出和YAML文件 目标 你会发现以下问题的答案: 如何打印和阅读文本条目文件和OpenCV使用YAML或XML文件? 如何为OpenCV做同样的数据结构?
- 学习笔记------数据结构(C语言版)栈的顺序存储
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 【数据结构与算法】【算法】一些算法
- 优先队列——左式堆