ArrayList是动态数据结构而LinkedList是链表是数据结构。
ArrayList采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中。
LinkedList是一独立空间的形式来保存对象,而每一个对象都要保存先一个对象的位置。
在查找的时候,再找到第一个元素的时候在根据元素中保留的位置来寻找下一个元素。
对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
ArrayList提供一些方法来操作内部来存储列表的数组大小。
LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。
LinkedList所有操作都是按照双重链接列表的需要执行的。在列表中编索引的操作将从开头或结尾遍历列表(从靠近指定索引的一端)。
每个 ArrayList 实例都有一个容量。该容量是指用来存储列表元素的数组的大小。它总是至少等于列表的大小。随着向 ArrayList 中不断添加元素,其容量也自动增长。并未指定增长策略的细节,因为这不只是添加元素会带来分摊固定时间开销那样简单。
ArrayList内部是使用可増长数组实现的,所以是用get和set方法是花费常数时间的,但是如果插入元素和删除元素,除非插入和删除的位置都在表末尾,否则代码开销会很大,因为里面需要数组的移动。
LinkedList是使用双链表实现的,所以get会非常消耗资源,除非位置离头部很近。但是插入和删除元素花费常数时间。
在添加大量元素前,应用程序可以使用 ensureCapacity 操作来增加 ArrayList 实例的容量。这可以减少递增式再分配的数量。
使用场景
如果要使用快速插入,删除元素,应该使用LinkedList。因为linkedList要比ArrayList快。
如果要快速随机访问元素,应该使用ArrayList。因为LinkedList链表式他要根据上一个元素存储的索引来寻找下一元素位置,这样就拖慢了它的速度。