1.从存储数据结构分析
ArrayList:数组
Vector:数组
LinkedList:双向链表
数组:可以根据下标快速查找,所以大部分情况下,查询快。但是如果要进行增删操作的时候,会需要移动修改元素后面的所有元素,所以增删的开销比较大,数组的对增删操作的执行效率低。而采用数组作为数据存储结构的ArrayList、Vector也存在这些特性,查询速度快(可以根据下标直接取,比迭代查找更快),增删慢。
链表:增加和删除元素方便,增加或删除一个元素,仅需处理结点间的引用即可。就像人手拉手连成一排,要增加或删除某个人只要附近的两个人换一个人牵手,对已经牵好手的人没影响。无论在哪里换人耗费的资源和时间都是一样的。但是查询不方便,需要一个个对比,无法根据下标直接查找。而采用链表结构存储的LinkedList也有这些特性,增删方便,查询慢(指的是随机查询,不是顺序查询)。
3.从并发安全上分析
Vector:线程安全(synchronized同步)
ArrayList:非线程安全
LinkedList:非线程安全
4、扩容:
ArrayList 与Vector 都有一个初始的容量大小,当存储进他们里面的元素个数超过了容量时,就需要增加ArrayList与Vector的存储空间, 每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取的一定的平衡。Vector默认增加为原来的两倍,而ArrayList默认为 1.5倍,ArrayList和Vector都可以设置初始的空间大小,Vector还可以设置增长的空间大小,而Arraylist 没有设置增长空间的方法。 即Vector增长原来的1倍,Arraylist增长原来的0.5倍