这只比较优缺点,不说原理
ArrayList:
- 适合随机查找和遍历,不适合插入和删除(除头尾插入和删除,涉及到数组移动)
- 线程异步,允许多个线程同时访问
- 不考虑安全,ArrayList比Vector高
- 元素个数大于当前数组长度,增长率为目前数组的50%
- ArrayList可以转换成Vector 也就是可以线程安全
Vector:
- 在ArrayList的基础上加了线程同步(Synchronized),一次只允许一个线程
- 实现同步需要很高的花费,因此,访问它比访问ArrayList慢
- 元素个数大于当前数组长度,增长率为目前数组的100%
- Vector由于使用了synchronized方法(线程安全,独占锁)所以性能上比ArrayList要差
- Vector可以转换成ArrayList(线程不安全的)
LinkedList:
- 使用双向链表,插入和删除比ArrayList、Vector都要快(头尾还是ArrayList快)
- 直接根据索引访问数元素比ArrayList、Vector慢,这是链表和数组的差别
建议:
- 随机查找和遍历用ArrayList(ArrayList性能比Vector好,如果在需要安全的情况下,可以把ArrayList转成Vector)
- 插入和删除用LinkedList(因为你无法保证插入删除肯定是头尾操作)