ArrayList和LinkedList的增删效率可以分为三种情况:在头部增删,在中间增删和在尾部增删;
当头部增删时:
LinkedList的效率是要优于ArrayList的,因为ArrayList要进行大量的数据迁移;
在中间增删时:
LinkedList的效率要低于Arraylist的,因为Linked在从头部头部或者尾部遍历找到对应的节点,而ArrayList迁移的数据就比较少了;
在尾部增删时:
1.当数据量较少时,两种的效率都很高,只需要在尾部添加元素即可;
2.当添加的元素有一定规模时,LinkedList的效率要高于ArrayList,因为ArrayList要频繁的扩容,复制数据,耗费时间;
3.当添加的元素非常大时,ArrayList的效率就要高于LinkedList,因为随着ArrayList的长度的增加,其扩容的次数会大大降低;ArrayList只需要一个简单的赋值就完成了; 而LinkedList需要不断地分配内存空间再进行赋值,本身效率就低于ArrayList的;
链表结构的缺点:
链表是非连续空间,随机访问效率低,访问的时候不能充分的使用CPU cache,每次插入节点和删除节点是很浪费内存的,内部节点都可以LinkedList进行垃圾收集,这在幕后需要做更多工作。此外,由于链表节点被分配在这里和那里,CPU 缓存的使用不会提供太多好处。
参考文档:
ArrayList和LinkedLIst的效率