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

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

JDK源碼閱讀——LinkedList

2019-11-11 01:39:52
字體:
供稿:網(wǎng)友

作為數(shù)據(jù)結(jié)構(gòu)中最基礎(chǔ)的兩種結(jié)構(gòu),數(shù)組與鏈表,在java中都有對(duì)應(yīng)的實(shí)現(xiàn)——ArrayList與LinkedList。本文主要分析一下LinkedList中的比較重要的源碼。 LinkedList是實(shí)現(xiàn)了List與Deque的雙向鏈表。他不是線程安全的,在多線程情況下需要用戶手動(dòng)保證線程安全性。系統(tǒng)推薦使用下面的方法來保證線程安全。

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

Field

transient int size = 0; //頭結(jié)點(diǎn) transient Node<E> first; //尾節(jié)點(diǎn)transient Node<E> last;//節(jié)點(diǎn)本身是一個(gè)內(nèi)部類PRivate static class Node<E> { //節(jié)點(diǎn)內(nèi)容本身 E item; //下一個(gè)節(jié)點(diǎn) Node<E> next; //上一個(gè)節(jié)點(diǎn) Node<E> prev; Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; } }

構(gòu)造器

//構(gòu)造一個(gè)普通的新鏈表對(duì)象 public LinkedList() { } //構(gòu)造一個(gè)新鏈表,并將入?yún)⒓蟖ppend到新鏈表中 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(); //需要新增的結(jié)點(diǎn)個(gè)數(shù) int numNew = a.length; if (numNew == 0) return false; //聲明頭結(jié)點(diǎn)與尾節(jié)點(diǎn) 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; }

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

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

圖3


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 孙吴县| 肥城市| 恩施市| 焦作市| 灵丘县| 黔西| 大港区| 长汀县| 萍乡市| 隆回县| 宣恩县| 缙云县| 依兰县| 阿拉善左旗| 大名县| 阳原县| 曲麻莱县| 江口县| 偃师市| 张北县| 兰坪| 大厂| 东乌珠穆沁旗| 金乡县| 左权县| 新干县| 南乐县| 吉林市| 冀州市| 北宁市| 钟山县| 瑞丽市| 文登市| 陇南市| 清新县| 泽库县| 泽库县| 革吉县| 郸城县| 彰化市| 报价|