LinkedList简介:
- LinkedList相关知识点:
- LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。
- LinkedList 实现 List 接口,能对它进行队列操作。
- LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。
- LinkedList 实现了Cloneable接口,即覆盖了函数clone(),能克隆。
- LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。
- LinkedList 是非同步的
LinkedLIst总结:
- LinkedList 实际上是通过双向链表去实现的。
它包含一个非常重要的内部类:Entry。Entry是双向链表节点所对应的数据结构,它包括的属性有:当前节点所包含的值,上一个节点,下一个节点。 - 从LinkedList的实现方式中可以发现,它不存在LinkedList容量不足的问题。
- LinkedList的克隆函数,即是将全部元素克隆到一个新的LinkedList对象中。
- LinkedList实现java.io.Serializable。当写入到输出流时,先写入“容量”,再依次写入“每一个节点保护的值”;当读出输入流时,先读取“容量”,再依次读取“每一个元素”。
- 由于LinkedList实现了Deque,而Deque接口定义了在双端队列两端访问元素的方法。提供插入、移除和检查元素的方法。每种方法都存在两种形式:一种形式在操作失败时抛出异常,另一种形式返回一个特殊值(null 或 false,具体取决于操作)。
第一个元素(头部) 最后一个元素(尾部)
抛出异常 特殊值 抛出异常 特殊值
插入 addFirst(e) offerFirst(e) addLast(e) offerLast(e)
移除 removeFirst() pollFirst() removeLast() pollLast()
检查 getFirst() peekFirst() getLast() peekLast()
- LinkedList可以作为FIFO(先进先出)的队列,作为FIFO的队列时,下表的方法等价:
队列方法 等效方法
add(e) addLast(e)
offer(e) offerLast(e)
remove() removeFirst()
poll() pollFirst()
element() getFirst()
peek() peekFirst()
- LinkedList可以作为LIFO(后进先出)的栈,作为LIFO的栈时,下表的方法等价:
栈方法 等效方法
push(e) addFirst(e)
pop() removeFirst()
peek() peekFirst()
常用方法(基于JDK源码分析):
添加元素:
public boolean add(E e); 将指定的元素追加到此列表的末尾。
public void add(int index, E element)
将指定元素插入此列表中的 指定位置 。将当前位置的元素(如果有)和任何后续元素向右移动(将其添加到其索引中)。
public boolean addAll(int index, Collection <?extends E > c)
从指定位置开始,将指定集合中的所有元素插入此列表。将当前位置的元素(如果有)和任何后续元素向右移动(增加其索引)。新元素将按照指定集合的迭代器返回的顺序出现在列表中。
public void clear()
从此列表中删除所有元素。此调用返回后,列表将为空。
public E remove()
检索并删除此列表的头部(第一个元素)。
public E remove(int index)
删除此列表中指定位置的元素。将任何后续元素向左移位(从索引中减去一个)。返回从列表中删除的元素。
public E peek()
检索但不删除此列表的头部(第一个元素)。
public E element()
检索但不删除此列表的头部(第一个元素)。
public E poll()
检索并删除此列表的头部(第一个元素)。
public E set(int index, E element)
用指定的元素替换此列表中指定位置的元素。
public int indexOf(Object o)
返回此列表中第一次出现的指定元素的索引,如果此列表不包含该元素,则返回-1。更正式地说,返回的指数最低i,从而 Objects.equals(o, get(i)),或-1,如果没有这样的指标。
public int size() 返回此列表中的元素数。