3-Vector底层结构和源码分析
介绍汇总:
- Vector的根本介绍
- Vector的运行重要步骤
- 底层结构和 ArrayList 的比较
1-Vector的根本介绍
- Vector 底层也是一个对象数组,protected Object[] elementData ;
- Vector 是线程同步的,即线程安全,Vector 类的操纵方法带有 synchronized 。
- public synchronized E set(int index, E element) {
- if (index >= elementCount)
- throw new ArrayIndexOutOfBoundsException(index);
- E oldValue = elementData(index);
- elementData[index] = element;
- return oldValue;
- }
复制代码
- 在开辟中,需要线程同步安满是,考虑使用 Vector 。
2-Vector的运行重要步骤
- Vector 构造器(三种)
无参构造器- public Vector() {
- this(10);
- }
- // 此无参构造器会调用一参构造器,并且初始容量大小为 10 ,容量增量大小为 0
复制代码 一参构造器- public Vector(int initialCapacity) {
- this(initialCapacity, 0);
- }
- // 此一参构造器会调用两参构造器,并且初始容量为指定大小,容量增量大小为 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;
- }
- // 此两参参构造器的初始容量为指定大小,容量增量也为指定大小
复制代码 总结
从这三个构造器可以发现,焦点是两参构造器,也是自由度最高的,可以指定初始容量,以及容量增量,这就代表之后扩容的话,以容量增量 + 原来的容量进行扩容(当然遇到这种方式无法满意扩容要求,就会采用其他方式,看源码);其次自由度最高的是一参构造器,可以指定初始容量,但容量增量为 0 ,这就代表之后扩容的话,以原来的容量的二倍进行扩容(当然遇到这种方式无法满意扩容要求,就会采用其他方式,看源码);然后自由度最低的,无参构造器,初始容量为默认容量 10 ,但容量增量为 0 ,其扩容方式与一餐构造器划一。
- 扩容过程
3- 底层结构和 ArrayList 的比较
集合底层结构版本线程安全(同步)服从扩容倍数ArrayList可变数组jdk1.2不安全,服从高如果有参构造1.5倍如果无参初始化后第一次为10第二次开始按1.5倍Vector可变数组Object[]jdk1.0安全,服从不高若是无参或一参,按原来的容量的2倍扩;若是两参,按原来的容量 + 增加容量扩
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |