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底層原理
- HashMap底層實現原理HashMap
- NSDictionary底層實現原理
- mysql索引底層實現MySql索引
- AutoreleasePool底層實現原理
- 解析ArrayList的底層實現(上)
- MySQL Join的底層實現原理MySql
- 死磕synchronized底層實現synchronized
- Python底層實現KNNPythonKNN
- MySQL索引底層實現原理MySql索引
- PHP 陣列底層實現PHP陣列
- 併發機制的底層實現
- Redis的底層實現---字串章節Redis字串
- Go語言map的底層實現Go
- KVO的使用和底層實現原理
- synchronized底層是怎麼實現的?synchronized
- session會話的底層實現方式Session會話
- ArrayList和LinkedList底層原理的區別和使用場景
- Go語言interface底層實現Go
- Spring AOP概述、底層實現Spring
- 深入理解 MySQL 底層實現MySql
- MG--探究KVO的底層實現原理
- 【雜談】Java I/O的底層實現Java
- 【spring】事務底層的實現流程Spring
- iOS開發UIScrollView的底層實現iOSUIView
- Torch中的RNN底層程式碼實現RNN
- iOS底層原理總結 -- 利用Runtime原始碼 分析Category的底層實現iOS原始碼Go
- LinkedList 的實現原理
- 基於"堆"的底層實現和應用
- 【雜談】從底層看鎖的實現2
- 關於Laravel框架中Guard的底層實現Laravel框架
- 詳解 PHP 陣列的底層實現:HashTablePHP陣列
- 面試官:說說反射的底層實現原理?面試反射
- 04 . Docker安全與Docker底層實現Docker
- 面試題深入解析:Synchronized底層實現面試題synchronized
- 深入解析 Go 中 Slice 底層實現Go
- php底層原理之陣列實現PHP陣列
- 橋接模式:探索JDBC底層實現橋接模式JDBC