受到这篇文章《如何阅读java源码》的鼓舞,开始阅读源码。今天起开一个专题#源码研究#,记录阅读源码的心得。
首先这俩类结构上都是数组实现的:
Arraylist:
private transient Object[] elementData;
Vector:
protected Object[] elementData;
既然都是数组实现的,那么就有共性,比如说,都使用连续内存,index查找和遍历比较快,插入和删除较慢(需要移动数组)。
粗略扫了一眼就能发现Vector中大部分方法是synchronized的。也就是说,Vector是线程安全的,ArrayList不是线程安全的。要维持性能安全就要花费一定系统开销。由此推断Vector的性能较ArrayList差。
接下来比较了主要方法,add,remove,两者没大区别。
后来实在看不出啥区别了,所以去google了一下。发现两者还有一个差别就是在扩容的时候,ArrayList扩容50%+1, Vector则是原容量*2;
综上,两者最主要的区别应该是线程安全方面。