LinkedList的底層實現
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable |
public interface Deque<E> extends Queue<E> 其實是雙端佇列 |
實現原理
List介面的連結串列實現,並提供了一些佇列,棧,雙端佇列操作的方法
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; } } |
與ArrayList對比,LinkedList插入和刪除操作更加高效,隨機訪問速度慢;
可以作為棧、佇列、雙端佇列資料結構使用;
非同步,執行緒不安全;
與ArrayList、Vector一樣,LinkedList的內部迭代器存在“快速失敗行為”;
支援null元素、有順序、元素可以重複
實現的Deque介面
雙端佇列
雙端佇列是指允許兩端都可以進行入隊和出隊操作的佇列,其元素的邏輯結構仍是線性結構。將佇列的兩端分別稱為前端和後端,兩端都可以入隊和出隊。
其實是間接實現Queue介面
主要的方法:
boolean offer(E e);
將物件e插入佇列尾部,成功返回true,失敗(沒有空間)返回false;
E poll();
獲取並移除佇列頭部元素,如果佇列為空,返回null;
E peek();
獲取但不移除佇列頭部元素,如果佇列為空,返回null;
boolean offerFirst(E e);
將物件e插入到雙端佇列頭部
boolean offerLast(E e);
將物件e插入到雙端佇列尾部;
Poll出隊方法操作
public E poll() { final Node<E> f = first; return (f == null) ? null : unlinkFirst(f); } |
private E unlinkFirst(Node<E> f) { // assert f == first && f != null; final E element = f.item; final Node<E> next = f.next; f.item = null; f.next = null; // help GC first = next; if (next == null) last = null; else next.prev = null; size--; modCount++; return element; } |
主要實現在unlinkFirst方法內,首先直接獲取被刪節點,臨時儲存其具體引用的物件element和下個引用next,然後將被刪節點物件引用和下個節點引用置null給gc回收,改變雙端佇列隊頭結點為被刪節點的下個引用next,如果next為空,將雙端佇列的隊尾結點last置null,否則將next節點的前引用置null;佇列長度減減,操作次數加加(快速失敗機制,參考HashMap),返回被刪節點引用的具體物件 |
相關文章
- 初識LinkedList底層原理
- ArrayList底層的實現原理
- NSDictionary底層實現原理
- AutoreleasePool底層實現原理
- HashMap底層實現原理HashMap
- mysql索引底層實現MySql索引
- Python底層實現KNNPythonKNN
- MySQL Join的底層實現原理MySql
- 解析ArrayList的底層實現(上)
- ArrayList和LinkedList底層原理的區別和使用場景
- 併發機制的底層實現
- Go語言map的底層實現Go
- Redis的底層實現---字串章節Redis字串
- KVO的使用和底層實現原理
- synchronized底層是怎麼實現的?synchronized
- 【spring】事務底層的實現流程Spring
- MySQL索引底層實現原理MySql索引
- PHP 陣列底層實現PHP陣列
- 死磕synchronized底層實現synchronized
- Spring AOP概述、底層實現Spring
- LinkedList 的實現原理
- iOS底層原理總結 -- 利用Runtime原始碼 分析Category的底層實現iOS原始碼Go
- 【雜談】Java I/O的底層實現Java
- MG--探究KVO的底層實現原理
- Go語言interface底層實現Go
- jdk1.6ArrayList底層實現JDK
- String操作方法底層實現!!!
- 深入理解 MySQL 底層實現MySql
- LinkedList實現原理
- 詳解 PHP 陣列的底層實現:HashTablePHP陣列
- 基於"堆"的底層實現和應用
- Redisson的看門狗機制底層實現Redis
- 【雜談】從底層看鎖的實現2
- Golang channel底層是如何實現的?(深度好文)Golang
- 關於Laravel框架中Guard的底層實現Laravel框架
- HashMap的實現原理 HashMap底層實現,hashCode如何對應bucket?HashMap
- php底層原理之陣列實現PHP陣列
- 死磕Synchronized底層實現--概論synchronized