ArrayList、Vector和LinkedList类
相同点:
- 都在java.util包中;
- 都是可伸缩数组,即可以动态改变长度的数组;
- 都是List接口的实现类,(List中)元素存放有序,可重复;
不同点:
- ArrayList和Vector底层是使用数组实现的;LinkedList底层使用双向循环链表数据结构实现;
- ArrayList和Vector索引数据速度快,增删元素速度慢;LinkedList增删元素速度快,索引速度慢;
- Vector是线程安全的,ArrayList和LinkedList线程不安全;
- ArrayList和Vector都有一个初始化的容量大小,默认为10,存储元素个数超过初始容量时,ArrayList默认扩充为原来的1.5倍+1,Vector默认扩充为原来的2倍;LinkedList更节省空间。
ArrayList类的声明
public class ArrayList<E> extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
……
}
Vector类的声明
public class Vector<E>
extends AbstractList<E>
implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
……
}
LinkedList类的声明
public class LinkedList<E>
extends AbstractSequentialList<E>
implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
……
}
使用场合
- 当数据的主要操作为索引或只在集合的末端增加、删除元素,使用ArrayList或Vector效率比较高;
- 当对数据的操作主要以指定位置的插入或删除操作,使用LinkedList效率比较高;
- 当在多线程中使用容器时,选用Vector较为安全。