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现在已经基本不再使用。
网友评论