特点
顺序访问
,访问节点需要O(n)的时间写快读慢
,插入/删除只需要O(1)的时间- 实现了
Deque双向队列
接口,因此LinkedList是一个双向链表 - 使用Iterator比index更快
非线程安全
成员变量和常量
- transient int
size
使用一个变量,记录链表的大小,提高效率 - transient Node<E> first
头结点 - transient Node<E> last
尾结点
方法
- 访问getFirst/getLast/get
getFirst/getLast直接返回成员变量即可。
get(index)的实现:如果index小于size的一半
,则正序遍历,否则倒序遍历,这体现了双向链表的好处,虽然时间是O(n),但规模小了一半
。 - 添加、插入addFirst/addLast/add/addAll
add(index,elem) O(n) - 修改set
先查再改O(n) - 删除removeFirst/removeLast/remove
remove先查再删除O(n)