Vector的底层结构剖析

 

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值