LinkedList源码解析
LinkedList
前言
LinkedList同时实现了List接口和Deque接口,所以它既可以是一个顺序容器也可以是一个队列(Queue)!,同时又可以当做栈(Stack)。当你想使用栈或者队列时,可以考虑使用LinkedList,因为Java已经声明不建议使用Stack类。关于栈和队列,现在首选是ArrayDeque,它有着比LinkedList更好地性能
一、底层数据结构
底层使用双向链表实现,双向链表的每个节点用内部类Node表示。链表通过first和last引用分别指向第一个和最后一个元素,当链表为空时,first和last都指向null。
其中Node是内部类
二、构造方法
三、getFirst(),getLast()
获取第一个元素,获取最后一个元素
四、remove(e),remove(index),removeFirst(),removeLast()
删除第一个equals e的元素,删除指定位置的元素,删除第一个元素,删除最后一个元素
删除元素 - 指的是删除第一次出现的这个元素, 如果没有这个元素,则返回false;判断的依据是equals方法, 如果equals,则直接unlink这个node;由于LinkedList可存放null元素,故也可以删除第一次出现null的元素;
五、add()
add方法也有两个版本:add(e),add(index,e)
前者在链表的末尾添加元素,后者在指定下标位置添加元素
六、clear()
为了让GC更快的回收放置的元素,需要将node之间的引用关系赋空
七、Positional Access方法
**
**
八、查找操作
查找操作的本质是查找元素的下标
查找第一次出现的index, 如果找不到返回-1;
查找最后一次出现的index, 如果找不到返回-1;
九、Queue方法
十、Duque方法