二、Vector

Vector是jdk1.2的类,比较老旧的一个集合类

Vector底层也是数组,与ArrayList最大的区别就是:同步(线程安全)

Vector是同步的1571558154066.png

我们可以看见这几个方法都是synchronized的。

在要求非同步的情况下我们可以用ArrayList来替代Vector

如果想要ArrayList实现同步我们就需要调用collections的方法

List list = Collections.synchronizedList(new ArrayList(...));

来实现同步

还有一个区别就是

  • ArratLIst在不够用的时候实在原来基础上拓展0.5倍,而Vector是一倍。
 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);
    }

总结

  • 底层是数组,现在很少用,已经被ArrayLIst替代,原因有两个

    • Vector的所有方法都是同步的,有性能损失
    • Vector出事话length是10超过length是会以100%的比率增加,相比ArrayList更加小号内存
最后修改:2019 年 10 月 22 日
如果觉得我的文章对你有用,请随意赞赏