联系:
ArrayList、Vector、LinkedList类均在java.util包中,都为List接口的子类。
区别:
- 结构上:ArrayList、Vector基于数组实现,LinkedList基于双向链表实现。
ArrayList | Vector | |
---|---|---|
初始化策略 | 采用懒加载策略,第一次add时才初始化内部数组,默认初始化大小为10。 | 产生对象时就初始化内部数组,默认大小为10。 |
扩容策略 | 扩容为原数组的1.5倍 | 扩容为原数组的2倍 |
线程安全问题 | 采用异步处理线程不安全,性能较高 | 采用synchronized修饰增删查改方法,线程安全,性能较低(锁粒度太粗,将当前集合对象锁住,读读互斥) |
其他 | JDK内置的Stack是Vector的子类 | |
使用场景 | 在大部分场合都是适合使用的,常适用于频繁查找、在集合末端插入与删除元素 | 不建议使用 |
- LinkedList采用异步处理,线程不安全,频繁在任意位置的插入与删除考虑使用,LinkedList是Queue接口的常用子类。