Java知識 LinkedList類詳解

2021-08-08 10:05:40 字數 2697 閱讀 1489

這篇部落格算不上對linkedlist類的詳解,我只能把自己淺薄的知識分享出來了。

雙向鍊錶
jdk1.6的時候是entry結點實現的,jdk1.7開始改用node結點實現。

那這兩個有什麼不同呢,**據說**是1.7優化的。說是從迴圈鍊錶變成 了非迴圈鍊錶。

因為linkedlist 是基於鍊錶的,因此不像arraylist需要擴容機制。
查詢操作源**:

public e get(int

index)

nodenode(int

index) else

}

可以看出他根據index和size比較來決定從哪邊開始遍歷才能更快的查詢到該下標的元素。而不是直接訪問到該元素。比起arraylist內部直接對陣列下標訪問效能確實差一截。

增刪操作源**:

以add(int index, e element)方法為例

public

void add(int

index, e element)

checkpositionindex(index);//函式如下,這是乙個檢查異常的函式,我們寫程式的時候可以借鑑這種思想,但是他現在不是我們考慮的重點。

private

void checkpositionindex(int

index)

if (index == size) //如果下標是最後的

linklast(element); //直接新增到最後

else //如果下標不是最後的

linkbefore(element, node(index)); //執行這個新增函式

linkbefore(e e, node succ)函式如下:

void linkbefore(e e, nodesucc)
pred 是當前要插入位置節點的上乙個節點,即圖中的第乙個節點。newnode 將要插入的物件包裝成node節點(指定上乙個節點為pred,下乙個節點為node()返回值succ)。

接著將succ節點的上乙個節點指定為我們的新節點newnode。那麼肯定會有邏輯將pred的next設定為newnode。

果然,最後做了乙個判斷,如果pred為null,說明succ節點為第乙個有資料的節點,就將生成的新節點newnode置為first節點,否則指定上個節點的下乙個節點為生成的新節點,即pred.next = newnode。

這樣就完成了整個鍊錶資料插入過程。顯然是不同於arraylist那樣地進行陣列複製。

ps:上面這一段是我抄的,原始碼我看不懂。。。。。

**請見下面的參考資料。

1、獲取鍊錶的第乙個和最後乙個元素

system.out.println(「鍊錶的第乙個元素是 : 」 + llist.getfirst());

system.out.println(「鍊錶最後乙個元素是 : 」 + llist.getlast());

2、從鍊錶生成子表

list subl = llist.sublist(1, 4);

3、新增元素:新增單個元素

如果不指定索引的話,元素將被新增到鍊錶的最後.

public boolean add(object element)

public boolean add(int index, object element)

也可以把鍊錶當初棧或者佇列來處理:

public boolean addfirst(object element)

public boolean addlast(object element)

addlast()方法和不帶索引的add()方法實現的效果一樣.

4、刪除元素

list.removefirst();

list.removelast();

5、使用鍊錶實現棧效果 (先進後出)

class stackl

public object top()

public object pop()

} 6、使用鍊錶來實現佇列效果(先進先出)

class queue

public object get()

public boolean isempty()

} 7、刪掉所有元素:清空linkedlist

llist.clear();

8、arraylist和linkedlist之間的轉換

通過構造方法互換

linkedlist linkedlist = new linkedlist(arraylist);

arraylist arraylist = new arraylist(linkedlist);

9、確認鍊錶是否存在特定元素

llist.contains(「4」);

1、linkedlist適合增刪,不適合查詢。

2、linkedlist不同步

3、linkedlist本質是雙向鍊錶

參考資料:

java原始碼分析08 LinkedList

喜歡乙個人,就會喜歡她的一切嗎?今天,我們來看下linkedlist的結構。linkedlist內部其實是雙向鍊錶實現的,而且擁有輪詢以及出棧的功能。增刪改查 public boolean add e e void linklast e e 每次增加新的元素,都是在鍊錶末尾加上,注意當前時刻的末尾節...

Java資料結構詳解(四) LinkedList

返回鍊錶的邏輯大小 transient int size 0 頭部節點 transient nodefirst 尾部節點 transient nodelast 一,無參構造器 public linkedlist 二,有引數的構造器 public linkedlist collection c add...

Java資料結構之手寫LinkedList

linkedlist的實現本質為乙個雙向鍊錶,下面是簡單的實現增刪改查 public class linkedlist public void add e e public void change int index,e e nodetarget node index target.item e 刪...