vector的介绍:
1.Vector实现了List接口的集合。
2.Vector的底层也是一个数组,protected Object[] elementData;
3.Vector 是线程同步的,即线程安全,Vector类的操作方法带有Synchronized.
4.在开发中,需要线程同步时,考虑Vector.
Vector扩容机制:
如果是无参默认空间为10,满后,按2倍扩容。
如果指定大小,则直接按2倍扩。
接下来是源码剖析:
Vector vector=new Vector();
创建了一个Vector对象,Debug进入
public Vector() {
this(10);
}
进入this方法
public Vector(int initialCapacity) {
this(initialCapacity, 0);
}
initialCapacity为0
public Vector(int initialCapacity, int capacityIncrement) {
super();
if (initialCapacity < 0)
throw new IllegalArgumentException("Illegal Capacity: "+
initialCapacity);
this.elementData = new Object[initialCapacity];
this.capacityIncrement = capacityIncrement;
initialCapacity为10,if判断为false,数组elementData为10
创建对象已完
for (int i = 0; i <= 15; i++) {
vector.add(i);
}
看看扩容1-15的底层运行
会先进行一个自动装箱,这里不演示了
public synchronized boolean add(E e) {
modCount++;
add(e, elementData, elementCount);
return true;
}
e 是传入的数,elementData是数组,elementCount是元素个数,进入add方法
private void add(E e, Object[] elementData, int s) {
if (s == elementData.length)
elementData = grow();
elementData[s] = e;
elementCount = s + 1;
}
如果元素个数等于elementData数组,则说明数组需要扩容,grow方法扩容,后添加元素
不等于的话,则进入数组
private Object[] grow() {
return grow(elementCount + 1);
}
进入grow方法
private Object[] grow(int minCapacity) {
int oldCapacity = elementData.length;
int newCapacity = ArraysSupport.newLength(oldCapacity,
minCapacity - oldCapacity, /* minimum growth */
capacityIncrement > 0 ? capacityIncrement : oldCapacity
/* preferred growth */);
return elementData = Arrays.copyOf(elementData, newCapacity);
}
newCapacity为20赋给elementData