Vector的添加方法代码不是很复杂,跟ArrayList 一样,本质上都是对数组做插入数据的操作,不同的是,方法都加了synchronized 修饰,所以,它的添加方法都是线程安全的。
其他操作元素的方法也是这样的套路,这里不打算一一列举了,因为都跟ArrayList 差不多,另外,Vector 比 ArrayList 多了一个迭代方法
public Enumeration<E> elements() { return new Enumeration<E>() { int count = 0; public boolean hasMoreElements() { return count < elementCount; } public E nextElement() { synchronized (Vector.this) { if (count < elementCount) { return elementData(count++); } } throw new NoSuchElementException("Vector Enumeration"); } }; }返回的是一个Enumeration 接口对象,大概也是个容器接口,没用过,不说太多。
Vector 对比 ArrayList最后,总结一下 Vector 和 ArrayList 的对比吧。
相同点:
底层都是基于数组的结构,默认容量都是10;
都实现了RandomAccess 接口,支持随机访问;
都有扩容机制;
区别:
Vector 的方法有做同步操作,是属于线程安全的,而ArrayList 是非线程安全的;
Vector默认情况下扩容后的大小为原来的2倍,而ArrayList 是1.5倍;
Vector 比 ArrayList 多了一种迭代器 Enumeration;
虽然Vector相较ArrayList做了同步的处理,但这样也影响了效率,因为每次调用方法都要获取锁,所以,一般情况下,对集合的线程安全没有需求的话,推荐使用 ArrayList。