前言
盼望着,盼望着,国庆小长假就要来了,先撸个代码压压惊。
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中常用的方法。预知后事如何,请自行查看源码?!