其两者内部数据保存都是由数组实现
1. ArrayList的实现是线程不同的(方法实现上没有加 synchronized),而Vector是线程同步的。若想线程安全,
那么它必须 保持外部同步。
这样造成的结果:效率比Vector高,但是线程不安全。
2. ArrayList扩容时每次为原来的50%, 而Vector扩容1倍。
若ArrayList线程同步,需采用如下的方式:
* It is imperative that the user manually synchronize on the returned
* list when iterating over it:
* <pre>
* List list = Collections.synchronizedList(new ArrayList());
* ...
* synchronized(list) { //确保整个代码块是同步的
* Iterator i = list.iterator(); // Must be in synchronized block
* while (i.hasNext())
* foo(i.next());
* }
这是Stackoverflow的解释:
其具体实现代码如下所示:
首先创建ArrayList, 然后调用Collections的静态方法
public
static
<T> List<T> synchronizedList(List<T>
list
)
其中,
SynchronizedList<E>是Collections的一个内部静态类,
其返回的List是同步的原因:在
SynchronizedList静态内部类中,通过synchronized同步代码块来完成同步,其本质还是调用了ArrayList的一些操作函数,例如add操作:
因此,SynchroizedList 与Vector的区别:
1 同步的方式: SynchronizedList采用同步块,而Vector采用同步方法
2 扩容大小: SynchronizedList每次扩容50%, 而Vector正好扩大一倍。
参考资料: