LinkedList的存储结构
- 内部使用链表的方式进行存储,所以不需要分配连续的内存空间
静态内部类 Node
private static class Node<E> {
E item; // 存储内容
Node<E> next;//尾结点
Node<E> prev;//头结点
Node(Node<E> prev, E element, Node<E> next) {
this.item = element;
this.next = next;
this.prev = prev;
}
为什么设置为静态的:
静态内部类不需要外部类实例化,可以直接实例化. 但是不能访问外部类的字段.而 此处的Node不需要访问LinkedList的字段,这样设计更方便,合理.
构造方法
-
LinkedList() //默认容量是0
-
LinkedList(Collection<? extends E> c) //将集合中的元素全部加入到链表中
public LinkedList(Collection<? extends E> c) {
this();
addAll(c);
}
- 头尾插入或删除时间复杂度为O(1) 对中间进行查找或删除插入时间复杂度为O(n) 需要next遍历.
LinkedList类特有的方法
void addFirst(E e) //在表头添加元素
void addLast(E e) //在表尾添加元素
E getFirst() //获取表头元素
E getLast() //获取表尾元素
E removeFirst() //删除取表头元素
E removeLast() //删除取表尾元素
链表的典型应用—缓存淘汰策略算法
- FIFO—First In First Out—先进先出算法
- LRU—Least Recently Used—最近最久未使用算法
- LFU—Least Frequently used—最近最少使用算法