LinkedList原始碼分析

2021-10-04 10:42:25 字數 2010 閱讀 1947

node是linkedlist儲存的基本單位

private static class node

}

儲存之前的尾節點

建立新的節點,新節點的前置直接點是之前的尾節點,後置節點為null

將last指向最新的尾節點

如果之前的鍊錶中乙個元素也沒有,那麼新建立的節點既是尾節點又是頭結點

如果之前鍊錶中已經有元素,那麼將之前的尾節點指向新的節點

將數量加一

查詢鍊錶中下標為index 的節點,利用二分法查詢,先判斷index是在左邊還是右邊,如果是左邊,就從做往右查詢,如果是右邊,就從右往左查詢,假設找到的節點為a。

如果是在尾部插入,就呼叫linklast方法,其實現和add(e e)方法一樣

如果是在中間插入,就建立新的節點,假設新的節點為b,b的後置節點為a,前置節點為a的前置節點,若a的前置節點為null(在煉表頭插入),就將first指向新的節點b,若a的前置節點c不為null,那麼就將前置節點c的next指向新節點b。

將數量加1

// 父類中的方法

public void add(int index, e element) catch (nosuchelementexception exc)

}public listiteratorlistiterator(int index)

private class listitr implements listiterator

}// 返回下標為index的元素

nodenode(int index) else

}// listitr 中的方法

public void add(e e)

// 和add(e e)的實現是相同的

呼叫這個方法,刪除的是頭結點。

LinkedList 原始碼分析

linkedlist資料結構是 雙向鍊錶 先來講下單鏈表和雙向鍊錶 雙向鍊錶 單鏈表相對於雙向鍊錶來說,結構簡單。但有乙個缺點,即在單鏈表中只能通過乙個節點的引用訪問其後續節點,無法直接訪問其前驅節點,如果在單鏈表中想找到某個幾點的前驅節點,必須遍歷鍊錶,耗費時間。因此擴充套件了單鏈表,在單鏈表結構...

LinkedList原始碼分析

資料結構 linkedlist是雙向迴圈鍊錶 1.構造方法 constructs an empty list.構造乙個空的列表 public linkedlist private transient entryheader new entry null,null,null entry e eleme...

LinkedList原始碼分析

linkedlist雖然和arraylist都實現了list介面,但兩者的底層資料結構截然不同。從類名可以看出,arraylist底層資料結構是陣列,而linkedlist底層資料結構是雙向鍊錶。兩者資料結構的優劣如下,arraylist按下標查詢元素速度快,但插入元素或者刪除元素效率低,因為都設計...