Java集合类源码解析:Vector (2)

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。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zyjfdj.html