ArrayList和LinkedList都实现了List接口,可是他们的实现原理却不同,其数据结构也不相同。数组
ArrayList是一个大小可变的数组,当有更多的元素添加进ArrayList中时,其大小会动态的增加。数据结构
LinkedList是一个双向链表,链表中的每个元素还保存有其前、后元素的索引。spa
对比
- 由于ArrayList是基于索引的数组,每个索引的位置是实际的数据,因此其基于索引在数组中搜索和读取数据要快于LinkedList。
- LinkedList在插入或删除数据时,不须要改变数组大小,也不须要在数组被装满时将全部数据从新载入一个新的数组。而ArrayList除了须要改变数组的同时还须要更新索引,因此LinkedList在插入或者删除要快于ArrayList。
- LinkedList须要更多的内存,由于ArrayList的每一个节点的位置是实际的数据,而LinkedList中每一个节点的数据除了数据自己还有先后节点的索引。
适用场景
不少场景下ArrayList更受欢迎:你须要一个不使用同步而基于索引的数据访问时尽可能使用ArrayList,ArrayList很容易使用,可是尽可能指定其大小,并减小数组的改变。索引
而如下场景使用LinkedList更合适:接口
- 你的应用不须要随机访问数据,而是从第一个元素依次进行处理时(如队列)。
- 你的应用须要更多的使用插入和更新,而不多去读取数据时。