Vector类继承了AbstractList抽象类,其内部数据存储方式是一个对象数组,几乎所有的方法都通过synchronized关键字修饰,支持多线程的同步,安全性较好但访问效率较低。
ArrayList类同样继承了AbstractList抽象类,它的内部数据存储方式与Vector相同也是一个对象数组,内部方法与Vector也很相似,最主要的不同在于ArrayList中的方法没有使用Synchronized修饰,这个类的使用并不保证线程安全。
上述两个类均实现了List, RandomAccess, Cloneable, java.io.Serializable接口,允许对内部存储的元素进行快速随机的访问。当内部数组的存储到达上限并还需要继续加入元素时,两个类的做法都是创建一个更大的新数组,然后将原来的数据拷贝到新的数组中来。由于两个类内部都是通过数组实现的,在查找和遍历等方面,效率很高,然而在插入、删除、复制等需要移动数组内元素的操作时,效率很低下。
LinkedList与前两个类不同,它的内部不通过数组实现,而是通过链表实现的(内部类Node),他在数据的删除、插入等操作上非常的灵活,效率比前两个都要高,但是在查找和遍历上就要慢很多。通过对LinkedList的封装,我们可以很容易的实现栈、队列、双向队列等数据结构。而且对存储数据量而言也不存在前两个类会受到数组大小限制而需要复制数组这样的缺点。