答:
①往集合中间插入数据时ArrayList比LinkedList慢
②ArrayList正好扩容的时候添加数据要比LinkedLit慢
ArrayList底层维护的是一个动态数组,LinkedLisd底层维护的是一个双向链表,它们之间的不同主要也是数组和链表的特征比较,根据底层数据结构不同,他们所适用的场景也不同,ArrayList更适合随机查找,LinkedList更适合添加和删除
大多数情况可以说是“ArrayList查询快,LinkedList添加删除快”,但严格来说并不是如此
ArrayList比LinkedList快,原理是:
ArrayList是数据有下标标记数据位置的,查询时直接返回对应的数组下标数据即可
LinkedList是链表,没有对数据进行位置标记,每次获取固定位置的数据都需要循环遍历链表
总结:虽然会出现上面的情况,可是因为ArrayList可以使用下标直接获取数据,所以在使用查询的时候一般选择ArrayList,而进行删除和增加时,LinkedList比较方便,所以一般还是使用LinkedList比较多。
是有前提条件的LinkedList在两种情况下插入数据要比ArrayList快
因为ArrayList往集合中间插入数据要做两件事,把之前的数据挪开赋值到新的数组位置,然后把需要插入的数据插入到数组对应的位置
当LinkedList在插入时,需要移动指针到指定节点,才能开始插入,一旦要插入的位置比较远,LinkedList就需要一步一步的移动指针,直到移动到插入位置,这就解释了,为什么节点值越大,时间越长,因为指针移动需要时间,所以插入位置的选取对LinkedList有很大的影响。
而ArrayList是数组结构,可以直接根据下标直接获得位置,这就省去了查找特定节点的时间,所以对ArrayList的影响不是特别大。
因为ArrayList维护的是一个数组,所以当容量到达阈值时就会进行扩容,然后会重新分配数据的位置,当数组扩容的时候速度也要比LinkedList慢
ArrayList要比LinkedList慢,原理同往集合中间插入数据一样,ArrayList每次删除数据都要对数组进行重组