java中LinkedList源碼分析

ArrayList是動態數組,其實本質就是對數組的操做。
那麼LinkedList實現原理和ArrayList是徹底不同的。
如今就來分析一下ArrayList和LinkeList的優劣吧
LinkedList是一個雙向鏈表,每一個元素都是一個Node對象,
這個node對象裏面有三個成員:
E item;指向實際的元素
Node<E> next;指向下一個節點
Node<E> prev;指向前一個結點

利用idea編輯器查看LinkedList的結構,發現只有三個成員變量。

而全部的public方法操做的都是這個三個變量。
下面逐個分析方法。

主要就是調用了linkLast方法。

步驟以下:
第一步:l指向尾節點,
第二步:建立新的節點newNode;由於是在鏈表的最後添加元素,因此新節點的next元素爲null.
第三步:尾節點指向新的節點
第四步:若是l(以前的尾節點)爲空,新節點看成第一個節點
第五步:若是l(以前的尾節點)不爲空,則以前的尾節點的next變量指向新節點。
鏈表大小size++;
修改的次數modCount++;node

List<String> list=new LinkedList<>();
list.add("a");
list.add("b");

與ArrayList不一樣,LinkedList內存是按需分配的,不須要提早分配內存空間,由於操做的不是數組。數組

get方法

checkElementIndex(index);主要用於檢查參數是否符合規範,沒什麼好說的。編輯器

主要看node(index)方法。

index<(size>>1)表示index小於size/2;
若是index索引位於前半部分,從頭開始根據next向後遍歷;
一直找到index-1索引處
若是在後半部分從last處開始根據prev向前遍歷。一直循環到index處。
ArrayList中數組是連續存放的,能夠根據索引直接定位元素,而LinkedList中,必須從頭或尾順着連接查找,因此論查詢效率LinkedList沒有ArrayList效率高;可是在鏈表前或尾添加和刪除的效率卻是比ArrayList要高。ide

LinkedList還提供了remove,add(int index,E element),indexOf(Object o)等等這些方法,基本上都是差很少的原理操做的。idea

相關文章
相關標籤/搜索