Java LinkedList工作原理及實(shí)現(xiàn)

1. 概述


以雙向鏈表實(shí)現(xiàn)审姓。鏈表無容量限制廷雅,但雙向鏈表本身使用了更多空間奏纪,也需要額外的鏈表指針操作。
按下標(biāo)訪問元素—get(i)/set(i,e) 要悲劇的遍歷鏈表將指針移動到位(如果i>數(shù)組大小的一半盛龄,會從末尾移起)饰迹。
插入芳誓、刪除元素時修改前后節(jié)點(diǎn)的指針即可,但還是要遍歷部分鏈表的指針才能移動到下標(biāo)所指的位置啊鸭,只有在鏈表兩頭的操作—add(), addFirst(),removeLast()或用iterator()上的remove()能省掉指針的移動锹淌。

LinkedList是一個簡單的數(shù)據(jù)結(jié)構(gòu),與ArrayList不同的是赠制,他是基于鏈表實(shí)現(xiàn)的赂摆。

Doubly-linked list implementation of the List and Deque interfaces. Implements all optional list operations, and permits all elements (including null).

LinkedList<String> list = new LinkedList<String>();
list.add("語文: 1");
list.add("數(shù)學(xué): 2");
list.add("英語: 3");

結(jié)構(gòu)也相對簡單一些,如下圖所示:


  1. set和get函數(shù)

public E set(int index, E element) {
    checkElementIndex(index);
    Node<E> x = node(index);
    E oldVal = x.item;
    x.item = element;
    return oldVal;
}
public E get(int index) {
    checkElementIndex(index);
    return node(index).item;
}

這兩個函數(shù)都調(diào)用了node函數(shù)钟些,該函數(shù)會以O(shè)(n/2)的性能去獲取一個節(jié)點(diǎn)烟号,具體實(shí)現(xiàn)如下所示:

Node<E> node(int index) {
    // assert isElementIndex(index);
    if (index < (size >> 1)) {
        Node<E> x = first;
        for (int i = 0; i < index; i++)
            x = x.next;
        return x;
    } else {
        Node<E> x = last;
        for (int i = size - 1; i > index; i--)
            x = x.prev;
        return x;
    }
}

就是判斷index是在前半?yún)^(qū)間還是后半?yún)^(qū)間,如果在前半?yún)^(qū)間就從head搜索政恍,而在后半?yún)^(qū)間就從tail搜索汪拥。而不是一直從頭到尾的搜索。如此設(shè)計篙耗,將節(jié)點(diǎn)訪問的復(fù)雜度由O(n)變?yōu)镺(n/2)迫筑。

參考資料


LinkedList (Java Platform SE 8)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市宗弯,隨后出現(xiàn)的幾起案子脯燃,更是在濱河造成了極大的恐慌,老刑警劉巖罕伯,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異叽讳,居然都是意外死亡追他,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進(jìn)店門岛蚤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來邑狸,“玉大人,你說我怎么就攤上這事涤妒〉ノ恚” “怎么了?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵她紫,是天一觀的道長硅堆。 經(jīng)常有香客問我,道長贿讹,這世上最難降的妖魔是什么渐逃? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮民褂,結(jié)果婚禮上茄菊,老公的妹妹穿的比我還像新娘疯潭。我一直安慰自己,他們只是感情好面殖,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布竖哩。 她就那樣靜靜地躺著,像睡著了一般脊僚。 火紅的嫁衣襯著肌膚如雪相叁。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天吃挑,我揣著相機(jī)與錄音钝荡,去河邊找鬼。 笑死舶衬,一個胖子當(dāng)著我的面吹牛埠通,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播逛犹,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼端辱,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了虽画?” 一聲冷哼從身側(cè)響起舞蔽,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎码撰,沒想到半個月后渗柿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡脖岛,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年朵栖,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柴梆。...
    茶點(diǎn)故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡陨溅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绍在,到底是詐尸還是另有隱情门扇,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布偿渡,位于F島的核電站臼寄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏溜宽。R本人自食惡果不足惜脯厨,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望坑质。 院中可真熱鬧合武,春花似錦临梗、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至汤善,卻和暖如春什猖,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背红淡。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工不狮, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人在旱。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓摇零,卻偏偏與公主長得像,于是被迫代替她去往敵國和親桶蝎。 傳聞我的和親對象是個殘疾皇子驻仅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容