千锋教育Java入门全套视频教程(java核心技术,适合java零基础,Java

ArrayList 和 LinkedList
1.ArrayList 是基于数组实现的,元素存放的位置都是连续的,查改效率高,增删效率低,线程不安全;LinkedList是基于双链表实现的,元素存放的位置不一定是连续的,增删的效率高,查改的效率低,线程不安全。
2.LinkedList 比 ArrayList 更占内存,因为LinkedList 的节点除了存储数据,还存储了两个引用,一个指向前一个元素,一个指向后一个元素。对于随机访问,ArrayList要优于LinkedList。
3.对于插入和删除操作,LinkedList 优于ArrayList (理论上),实际上并非如此,如果在List靠尾部的地方插入,那么ArraysList 只需要移动较少的数据,而LinkedList 则需要一直查找到列表尾部,反而耗费较多时间,此时ArrayList 就比 LinkedList 快。
(1) 如果应用程序对数据有较多的随机访问,ArrayList对象要优于LinkedList对象
(2) 如果应用程序有更多的插入或者是删除操作,较少的随机访问,LinkedList对象要优于ArrayList对象
ArrayList
ArrayList类实现类可变数组的大小,存储在内的数据称为元素。它还提供了快速基于索引访问元素的方式,对尾部成员的增加和删除支持较好。使用ArrayList创建的集合,允许对集合中的元素进行快速的随机访问,不过,向ArrayList中插入与删除元素的速度相对较慢。
一个用数组实现的List,能进行快速的随机访问,效率高而且实现了可变大小的数组。
它是可以调整大小的数组,实现了List接口。实现所有可选列表操作,并允许所有元素包括null。除了实现List接口之外,该类还提供了一些方法来操作内部使用的存储列表的数组的大小。内部封装一个数组,用数组来存储数据。内部数组的默认初始容量为10,存满后1.5倍增长。
LinkedList
LinkedList类采用链表结构保存对象,这种结构的优点是便于向集合中插入或者删除元素。需要频繁向集合中插入和删除元素时,使用LinkedList类比ArrayList类效果高,但是LinkedList类随机访问元素的速度则相对较慢。这里的随机访问是指检索集合中特定索引位置的元素。
双链表实现了List 和 Deque接口。实现所有可选列表操作,并允许所有元素(包括null)。所有的操作都能像双向列表一样。索引到列表中的操作将从开始或者结束遍历列表,以更接近指定的索引为准。
对顺序访问进行了优化,但随机访问的速度相对较慢。可以作为栈或队列来用。