这个要看楼主数据结构的功底了
ArrayList底层实现的数据结构是数组
LinkedList底层实现的数据结构是链表
数组在内存中是连续的
在某个下标想插入一个值的时候
需要把这个下标上的值与他后面所有的值都往后挪一位
如果在存储的数据过多的情况下
你在前面插入一个值后面所有的值都会往后挪一位
挪位操作是通过交换来完成的,所以时间和资源都浪费在交换和挪位上了
但是他的查询是很快的,也是相对链表来说的
链表由于在内存中不一定连续,他是用指针串起来的一个一个的节点
想插入数据直接改变一下指针的指向
(在java里不会直接操作指针,这是底层的实现,你也可理解为引用,其实就是根据一个地址取里面的值)
比如想在a节点后面插入一个p指向的节点b
只需要
b.next=a.next
a.next=p
就直接插入了一个数据
它的插入和删除的效率比数组高的不是一点半点
存储的数据越多愈能显示出来差距
但是链表的查询是很麻烦的
他需要从头至尾一个节点一个节点的遍历
数据越多查询效率就越低
数组恰恰相反
这就是为什么ArrayList 和LinkedList一个查询效率高,一个插入删除效率高的原因
希望能对你有所帮助。。。 |