美文网首页
2018-08-08

2018-08-08

作者: 大柚子_ | 来源:发表于2018-08-08 11:22 被阅读0次

    Java集合类的底层实现

    Vector底层实现和原理

    Vector作为List的另外一个典型实现类,完全支持List的全部功能,Vector类也封装了一个动态的,允许在分配的Object[]数组,Vector是一个比较古老的集合,JDK1.0就已经存在,建议尽量不要使用这个集合,Vector与ArrayList的主要是区别是,Vector是线程安全的,但是性能比ArrayList要低。

    成员变量

    protected Object[] elementData; //存放元素的数组 

    protected int elementCount; //已经放入数组的元素个数 

    protected int capacityIncrement; //数组的增长系数

    构造函数

    1.提供初始大小,和增长系数

    public Vector(intinitialCapacity,intcapacityIncrement);

    2.提供初始大小,增长系数为零

    public Vector(int initialCapacity);

    3.无参构造方法

    默认值为10

    4.将指定的集合元素转化为Vector

    public Vector(Collection c);

    总结:

    Vector和ArrayList的实现方式可以看出非常的类似,既然Vector类建议尽量少的使用,还是最好不要用了,通过上面的源码发现,每个方法中都添加了synchronized的关键字来保证同步,所以它是线程安全的,但正是这些方法的同步,让它的效率大大的降低了,比ArrayList的效率要慢。

    1.Vector有四个不同的构造方法。无参构造方法的容量为默认值10,仅包含容量的构造方法则将容量增长量(从源码中可以看出容量增长量的作用,第二点也会对容量增长量详细说)明置为0。

    2.注意扩充容量的方法ensureCapacityHelper。

    与ArrayList相同,Vector在每次增加元素(可能是1个,也可能是一组)时,都要调用该方法来确保足够的容量。当容量不足以容纳当前的元素个数时,就先看构造方法中传入的容量增长量参数CapacityIncrement是否为0,如果不为0,就设置新的容量为就容量加上容量增长量,如果为0,就设置新的容量为旧的容量的2倍,如果设置后的新容量还不够,则直接新容量设置为传入的参数(也就是所需的容量),而后同样用Arrays.copyof()方法将元素拷贝到新的数组。

    3.很多方法都加入了synchronized同步语句,来保证线程安全。

    4.同样在查找给定元素索引值等的方法中,源码都将该元素的值分为null和不为null两种情况处理,Vector中也允许元素为null。

    5.其他很多地方都与ArrayList实现大同小异,Vector现在已经基本不再使用。

    相关文章

      网友评论

          本文标题:2018-08-08

          本文链接:https://www.haomeiwen.com/subject/fdptbftx.html