从图中可以看出:
1. List是一个接口,它继承与Collection接口,代表有序的队列。
2. AbstractList是一个抽象类,它继承与AbstractCollection。AbstractList实现了List接口中除了size()、get(int location)之外的方法。
3. AbstractSequentialList是一个抽象类,它继承与AbstrctList。AbstractSequentialList实现了“链表中,根据index索引值操作链表的全部方法”。
4. ArrayList、LinkedList、Vector和Stack是List的四个实现类,其中Vector是基于JDK1.0,虽然实现了同步,但是效率低,已经不用了,Stack继承与Vector,所以不再赘述。
5. LinkedList是个双向链表,它同样可以被当作栈、队列或双端队列来使用。
ArrayList和LinkedList区别
通常情况下,ArrayList和LinkedList的区别有以下几点:
1. 数据结构:ArrayList是实现了基于动态数组的数据结构,而LinkedList是基于链表的数据结构;
2. 随机访问:对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;
3. 添加删除操作:对于添加和删除操作add和remove,一般大家都会说LinkedList要比ArrayList快,因为ArrayList要移动数据。但是实际情况并非这样,对于添加或删除,LinkedList和ArrayList并不能明确说明谁快谁慢,
当数据量较大时,大约在容量的1/10处开始,LinkedList的效率就开始没有ArrayList效率高了,特别到一半以及后半的位置插入时,LinkedList效率明显要低于ArrayList,而且数据量越大,越明显
使用场景:
(1)如果应用程序对各个索引位置的元素进行大量的存取或删除操作,ArrayList对象要远优于LinkedList对象;
( 2 ) 如果应用程序主要是对列表进行循环,并且循环时候进行插入或者删除操作,LinkedList对象要远优于ArrayList对象。