Java中的Vector源码解析
一、Vector介绍
Vector 是一个矢量队列,它的继承关系和ArrayList是一样的,同样实现了RandomAccess
标记接口,用来表明其支持快速(通常是固定时间)随机访问。此接口的主要目的是允许一般的算法更改其行为,从而在将其应用到随机或连续访问列表时能提供良好的性能。Vector
实现了Cloneable
标记接口,用来指示Object.clone()
方法可以合法地对该类实例按字段复制。如果在没有实现 Cloneable
接口的实例上调用 Object
的 clone
方法,则会导致抛出 CloneNotSupportedException
异常。Serializable
接口: 类通过实现 java.io.Serializable
接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化
二、Vector类继承关系
三、Vector特性
1、底层由一个可以增长的数组组成
2、
Vector
通过capacity
(容量) 和capacityIncrement
(增长数量) 来尽量少的占用空间3、扩容时默认扩大两倍
4、最好在插入大量元素前增加
vector
容量,那样可以减少重新申请内存的次数5、通过
iterator
和lastIterator
获得的迭代器是fail-fast
的6、通过
elements
获得的老版迭代器Enumeration
不是 fail-fast 的7、同步类,每个方法前都有同步锁
synchronized
四、Vector vs ArrayList
共同点
1、都是基于数组
2、都支持随机访问
3、默认容量都是 10
4、都有扩容机制
区别
1、
Vector
出生的比较早,JDK 1.0 就出生了,ArrayList
JDK 1.2 才出来2、
Vector
比ArrayList
多一种迭代器Enumeration
3、
Vector
是线程安全的,ArrayList
不是线程安全的4、
Vector
默认扩容2倍,ArrayList
是1.5倍5、
Vector
相比ArrayList
很多方法都使用了synchronized
来保证线程安全,这也就意味着每次都需要获得对象同步锁,效率会明显比ArrayList
要低