LinkedList add方法底層實現

2021-05-25 07:37:29 字數 704 閱讀 9115

linkedlist底層是通過雙向鍊錶實現的。

linkedlist 為空建構函式如下:

可以看到,在linkedlist裡定義了乙個transient 成員變數header,其為entry型別。entry型別即為雙向鍊錶中的乙個節點或者叫元素,每個元素由三部分組成,指向前乙個節點的引用(c語言裡叫指標)、元素本身的值和指向後乙個節點的引用。entry實現如下:

可以看到,next和previous都為entry型別。通過建構函式,可以看出在定義新節點時,除需指明節點本身的值為,還需指定next和privious。

linkedlist.add方法,實現如下:

add方法實際上是呼叫addbefore方法來實現增加節點的功能。可以看出,在增加乙個新節點時,首先定義新節點newentry。

這裡,第二個引數entry是指新增節點的下乙個節點,傳入的是header(可以理解為首節點,雙向鍊錶,最後乙個節點的下乙個節點則為首節點)。

第三個引數entry.previous是指新增節點的前乙個節點,傳入的是header.previous。為什麼是header.previous呢?

因為在增加新節點之前,header.previous始終是指向當前鍊錶的最後乙個節點,當增加新節點時,新節點的前乙個節點也就是當前鍊錶的最後乙個節點。

建立了新節點之後,還需要修改兩個引用(指標),即當前鍊錶最後乙個節點的next指向新增加的節點和header.previous。

方法的呼叫 this方法 構造方法

1 呼叫者和被呼叫者方法位於同一類中,呼叫形式如下 this 方法名 在大多數情況下,關鍵字this可以忽略 呼叫者位於被呼叫方法所在類的外部 物件名.方法名或者類名.方法名 抽象類只能作為父類,不能例項化。只能被繼承 抽象方法是一種只有方法宣告而沒有方法體定義的特殊方法,最後有乙個分號 而沒有方法...

例項方法 靜態方法 類方法

首先新建乙個日期date類,屬性為年,月,日,tomorrow 是例項方法,這個最常見,比較簡單,例項方法的第乙個引數是例項物件self 當我們傳入的年月日是2018 6 4這樣的形式,我們就需要先進行字串處理,在這裡使用了元組的拆包 這是最基本的方式,但是這樣寫會有乙個問題,每次傳參都需要進行字串...

類方法 物件方法 原型方法

js類方法,物件方法,原型的理解 function people name 類方法 people.run function 原型方法 people.prototype.introducechinese function 測試 var p1 new people windking p1.introdu...