国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

JDK源碼閱讀——LinkedList

2019-11-11 01:44:53
字體:
來源:轉載
供稿:網友

作為數據結構中最基礎的兩種結構,數組與鏈表,在java中都有對應的實現——ArrayList與LinkedList。本文主要分析一下LinkedList中的比較重要的源碼。 LinkedList是實現了List與Deque的雙向鏈表。他不是線程安全的,在多線程情況下需要用戶手動保證線程安全性。系統推薦使用下面的方法來保證線程安全。

List list = Collections.synchronizedList(new LinkedList(...));

Field

transient int size = 0; //頭結點 transient Node<E> first; //尾節點transient Node<E> last;//節點本身是一個內部類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; } }

構造器

//構造一個普通的新鏈表對象 public LinkedList() { } //構造一個新鏈表,并將入參集合append到新鏈表中 public LinkedList(Collection<? extends E> c) { this(); addAll(c); }//append的核心代碼在這里public boolean addAll(int index, Collection<? extends E> c) { checkPositionIndex(index); Object[] a = c.toArray(); //需要新增的結點個數 int numNew = a.length; if (numNew == 0) return false; //聲明頭結點與尾節點 Node<E> pred, succ; //從尾部開始appedn if (index == size) { succ = null; pred = last; } else { //從中間開始append,如圖1 succ = node(index); pred = succ.prev; }

圖1

for (Object o : a) { @SuppressWarnings("unchecked") E e = (E) o; Node<E> newNode = new Node<>(pred, e, null); if (pred == null) first = newNode; else pred.next = newNode; pred = newNode; }

上述循環的作用就是鏈表的插入操作,如圖2。不停的移動pred,把輸入的集合全都append到鏈表尾部。 圖2

if (succ == null) { last = pred; } else { pred.next = succ; succ.prev = pred; } size += numNew; modCount++; return true; }

圖3


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 吉林省| 长垣县| 南部县| 噶尔县| 佛坪县| 翁源县| 松溪县| 宾阳县| 吐鲁番市| 刚察县| 五莲县| 桐梓县| 遂溪县| 通山县| 吉木乃县| 托克逊县| 东乡族自治县| 于田县| 礼泉县| 汕头市| 宝山区| 承德市| 宣汉县| 垫江县| 灌南县| 安达市| 左权县| 教育| 巴楚县| 从化市| 岫岩| 大洼县| 桃园市| 京山县| 瓦房店市| 洞口县| 兴仁县| 宁南县| 息烽县| 闸北区| 车险|