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

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

JDK源碼閱讀——LinkedList

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

作為數據結構中最基礎的兩種結構,數組與鏈表,在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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 怀柔区| 府谷县| 来凤县| 临高县| 东源县| 枞阳县| 广宁县| 揭西县| 扎赉特旗| 三台县| 兴隆县| 武乡县| 浦北县| 新巴尔虎右旗| 正定县| 兖州市| 晋州市| 辉南县| 淮北市| 连平县| 田阳县| 宁蒗| 科技| 成安县| 阿勒泰市| 乌拉特后旗| 海原县| 丰台区| 金阳县| 绥阳县| 新津县| 中方县| 孙吴县| 太原市| 梁河县| 新闻| 凭祥市| 樟树市| 新和县| 栖霞市| 桂东县|