Vector源码解读

本文介绍Vector源码分析,对其API doc注解进行翻译并解释。

一、翻译Vector类的注解:

①基本功能:Vector类实现了一系列的array对象。像一个array一样,它包含的成员可以通过整数下标来访问,但是它的长度(size)可以根据需要进行扩增和收缩,以适应在Vector对象创建后增加和移除元素的需求。Vector对象通过维护一个容量和一个容量扩增(capacityIncrement)属性,来优化存储管理。容量属性的大小总是至少为Vector对象的size,通常由于随着成员被添加进来,Vector的存储根据容量扩增大小进行增加,这导致vector的实际大小一般比size大。应用程序可以在插入大量成员之前增加Vector的容量,这会减少增量重分配vector结构的次数。

②快速失败:Vector对象的iterator()方法返回的迭代器,以及listIterator(int)方法都是fail-fast(快速失败)。在迭代器被创建后的任何时候修改Vector对象的结构,ListIterator#remove()和ListIterator#add(Object)的修改除外,迭代器将会抛出一个并发修改异常ConcurrentModificationException。因此,面对并发修改,迭代器快速并干净地失败,而不是冒着导致在未来不定的时刻出现任意的不固定的行为的风险。通过枚举迭代也是快速失败的。

1)注意:迭代器行为的快速失败行为不能得到保证,通常在非同步的并发修改时都难以保证。快速失败迭代器尽最大努力抛出并发修改异常。因此,编写一个依赖此异常的正确性的程序是错误的,迭代器快速失败行为只应该被用于探测bug。

2)注意:从java1.2开始,vector类被改造了,实现了List接口,是的它成为Java Collection框架的一个成员。不像新的collection的实现类,Vector是同步的。如果需要一个collection线程安全的实现,那么推荐使用ArrayList代替vector。

二、解释

①capacityIncrement变量:vector对象容量自动增加的幅度,当vector的size超过vector容量时执行自动扩增。如果capacityIncrement为0或者为负数,vector的容量在需要增长的时候会被加倍。

②其内部结构和思想,同arraylist一致,区别在于给每个方法都加上了synchronize,因此线程安全时性能不如ArrayList。

你可能感兴趣的:(互联网,源码,集合)