Vector源码基本理解。

前言

    盼望着,盼望着,国庆小长假就要来了,先撸个代码压压惊。
    Vector这东西,我没用过,只在背面试题的时候见过,说是线程安全之类的,但是又不建议使用,真™绕。

Vector

    Vector的底层也是Object[],这点和ArrayList有一点像呢!

  1.构造方法

无参构造方法: //调用有参的构造方法,创建一个长度为10的Object[] 
public Vector() {
        this(10);调用一个有参构造器
}
public Vector(int initialCapacity) {
        this(initialCapacity, 0);//又调用另一个有参构造器
}
public Vector(int initialCapacity, int capacityIncrement) {
//如果传过来的参数小于0,则抛出异常,否则则创建一个长度为该参数大小的Object数组
        super();
        if (initialCapacity < 0)
            throw new IllegalArgumentException("Illegal Capacity: "+
                                               initialCapacity);
        this.elementData = new Object[initialCapacity];
        this.capacityIncrement = capacityIncrement;
}
    //还有一个参数为集合的构造器就不看了,大体意思就是把集合转换为Object数组

  2.添加元素–>add(E e)

public synchronized boolean add(E e) {
        modCount++;
        ensureCapacityHelper(elementCount + 1);
        elementData[elementCount++] = e;
        return true;
}
//思路和ArrayList差不多,就不多多BB了,只不过加了一个synchronized 修饰,所以是线程安全的!

  3.获取元素–>get(int index)

    代码就不贴了,太简单了,还是加了一个synchronized 修饰,保证线程安全!

  4.扩容机制

    扩容机制也很简单,就不贴代码了,简单来说就是创建一下新的数组,数组长度为旧数组的2倍。

总结

    Vector和ArrayLits类似,通过下标查询速度比较快,时间复杂度为O(1);
    Vector增删比较慢,可能需要移动元素,时间复杂度X,O(1)≤X≤O(n))(一般直接说O(n));
    但是它是synchronized修饰的,所以效率贼低,消耗资源,不建议使用!!!

    至此,我们随便看了看Vector中常用的方法。预知后事如何,请自行查看源码?!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值