1.Vector的数据结构
protected Object[] elementData; //可以看出来Vector的数据结构和ArrayList的数据结构是相同的都是一个数组 |
2.主要参数
protected Object[] elementData; //一个数组维护Vector的数据结构 protected int elementCount; //元素数量 protected int capacityIncrement; //每次扩容大小 protected transient int modCount = 0; |
3.核心构造方法
public Vector() { public Vector(int initialCapacity) { public Vector(int initialCapacity, int capacityIncrement) { |
capacityIncrement:指示每次扩容的大小,默认是扩大现有容量的1倍
initialCapacity:初始容量(默认的初始化容量为10)
4. add(E e)方法
public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); //扩容方式 elementData[elementCount++] = e; // 增加在数组尾部 return true; } Vector的方法都使用了关键字sychronized修饰。所以是线程安全的。 |
5扩容方式
private void ensureCapacityHelper(int minCapacity) { private void grow(int minCapacity) { //扩容方式如果设置了扩容大小(capacityIncrement > 0)按照扩容大小增加否则增加到原来的2倍 |
6get(int index)方法
public synchronized E get(int index) {
E elementData(int index) { |
7 remove(int index)
public synchronized E remove(int index) { |
根据索引删除的主要方法调用的System.arraycopy()方法
7.1 arraycopy()方法
public static native void arraycopy(Object src, int srcPos, |
可以看出原来的0元素被新复制过来的元素替换(可以实现删除数据)
把索引为5的后4个数字,复制到索引为4的位置,变成了123467899;这样索引为4的位置被索引为5的位置替换,实现了删除,在把最后一个赋值Null
8.总结
1.ctor的数据结构和ArrayList的数据结构相同都是数组实现的,特点也相同
2.阅读发现Vector类的很多关键方法都添加了sychronized关键字,所以是一个线程安全的动态数组。如果不需要线程安全,不建议选择,毕竟同步有额外的开销。