Android知识Android开发Java学习笔记

走进源码——Vector阅读笔记

2017-06-22  本文已影响58人  l_sivan

Vector

继承自AbstractList,实现了List,RandomAccess,Cloneable,和Serializable接口,具有List的特性,提供可随机访问,提供自身克隆以及序列化的一个容器类。
特点:线程安全;数组实现

Vector的实现和ArrayList没什么区别,这里就不列成员变量和一些共有的方法了,有兴趣可以去看走进源码——ArrayList阅读笔记,这篇主要讲Vector和ArrayList的区别

protected int capacityIncrement;

形参,这个形参如其名,容量增长,取好听点,我们叫容量增长因子。

public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
}
类似于ArrayList的带initialCapacity形参的构造函数,区别就在于初始化自身的capacityIncrement属性而已,其次还有下面两个
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
public Vector() {
this(10);
}

这里吐槽下this(10);,在ArrayList那里起码还有一个DEFAULT_CAPACITY,在Vector这里直接就是10....是懒了吗...Vector的默认初始化就是容量为10,容量增长因子为0

private void grow(int minCapacity) {
// overflow-conscious code
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ?
capacityIncrement : oldCapacity);
if (newCapacity - minCapacity < 0)
newCapacity = minCapacity;
if (newCapacity - MAX_ARRAY_SIZE > 0)
newCapacity = hugeCapacity(minCapacity);
elementData = Arrays.copyOf(elementData, newCapacity);
}

很明显,如果在初始化的时候传入了capacityIncrement,那么,vector的每次容量的增长都是以capacityIncrement为单位进行增长的,所以就没有了ArrayList中直接增大1.5倍的爆炸增长速率

其余的实现和ArrayList都是大同小异,这里就不在撰述了

水平有限,难免有错,还请评论区指正

上一篇下一篇

猜你喜欢

热点阅读