ArrayList和Vector这二者都是封装了一个可变化,可扩容的动态数组,而Vector 只要是关键性的操作,方法前面都加了synchronized关键字,来保证线程的安全性,其他2者都是差不多的。
//原有的方法
public synchronized void addElement(E obj) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = obj;
}
//List接口的短名字方法
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
//Vector的add
public synchronized boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
//ArrayList的add
public boolean add(E e) {
modCount++;
ensureCapacityHelper(elementCount + 1);
elementData[elementCount++] = e;
return true;
}
所以Vector的实现逻辑是跟ArrayList是一样的,主要是多了synchronized关键字,当执行synchronized修饰的方法前,系统会对该方法加一把锁,方法执行完成后释放锁,加锁和释放锁的这个过程,在系统中是有开销的,因此,在单线程的环境中,Vector效率要差很多。你可以先了解ArrayList的源码—》》》》》从源码深入底层解析Java的数组列表ArrayList看完这篇文章后就知道了。
原创来源:滴一盘技术