概述
1 | public class LinkedList<E> extends AbstractSequentialList<E> |
ArrayList继承于AbstractSequentialList,实现了List接口、Deque接口、Cloneable接口(浅拷贝)、Serializable接口。总的来说,LinkedList是线程不安全的,允许元素为null的双向链表,它也可以被当作栈、队列或双向队列进行操作。
与ArrayList的比较
LinkedList与ArrayList相比,ArrayList的增删效率低(O(n)),但是改查效率高(O(1))。而LinkedList正好相反,由于其底层是链表实现的,增删(O(1))只需要修改链表节点指针,所以增删效率较高,而改查都需要先定位到目标节点(O(n)),故改查效率较低。同时,LinkedList不需要ArrayList中的批量扩容,也不需要预留空间,所以空间效率也比ArrayList高。
但是和ArrayList比,LinkedList没有实现RandomAccess接口,所以随机访问元素速度较慢。虽然作者做了折半查找的优化(根据index判断目标节点在链表的前半段还是后半段,然后决定是从头部开始尾部开始查找),但查找的时间效率仍然比较低。
LinkedList源码阅读笔记
1 | package java.util; |