Vector

Vector

Posted by HuangCanCan on October 25, 2020

Vector


public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
    

Vector中的操作是线程安全的。

Vector加synchronized锁后真的是线程安全?不是,因为锁的是方法,锁的粒度不一定是线程安全的。

复合操作需要程序自己控制线程安全

与ArrayList不同的地方:

  • 所有方法都加了synchronized关键字

  • Vector没有空数组的设计

ArrayList:
private static final Object[] EMPTY_ELEMENTDATA = {};
private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};
  • 扩容因子不一样,Vector的扩容因子是2,ArrayList的扩容因子是1.5
ArrayList:
 int oldCapacity = elementData.length;
 int newCapacity = oldCapacity + (oldCapacity >> 1);
Vector:
int oldCapacity = elementData.length;
int newCapacity = oldCapacity + ((capacityIncrement > 0) ? 
    capacityIncrement : oldCapacity);