Vector底层结构和代码解析

基本介绍

定义说明

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{

Vector底层是一个对象数组,protected Object[] elementData;

Vector是线程同步的(线程安全),Vector类的操作方法带有synchronized

开发时,需要线程同步安全时,考虑Vector

  底层结构 版本 线程安全(同步)效率 扩容倍数
ArrayList 可变数组 jdk1.2 不安全

如果是有参构造器1.5倍,无参第一次10第二次开始1.5倍扩容

Vector 可变数组Object[] jdk1.0 安全,效率不高 无参,默认10;满后2倍扩容,指定大小每次直接按2倍扩容
public Vector() {this(10);}

 确定数据添加到vector集合

public synchronized boolean add(E e) {
        modCount++;
        ensureCapacityHelper(elementCount + 1);
        elementData[elementCount++] = e;
        return true;
    }
// 确定是否需要扩容
private void ensureCapacityHelper(int minCapacity) {
        // overflow-conscious code
        if (minCapacity - elementData.length > 0)//扩容条件
            grow(minCapacity);
    }

 若需要数组大小不足则扩容,扩容算法:

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);
    }
Debug代码
        Vector vector=new Vector();
        for (int i = 0; i < 10; i++) {
            vector.add(i);
        }
        vector.add(10);
        vector.add(11);
        for (Object o :vector) {
            System.out.println(vector);
        }

 

posted @ 2024-07-03 14:35  Dr丶云幕  阅读(6)  评论(0编辑  收藏  举报