1. 程式人生 > >JDK1.8原始碼——java.util.LinkedList

JDK1.8原始碼——java.util.LinkedList

目錄

正文

回到頂部

LinkedList定義

LinkedList 是連結串列實現的線性表(雙鏈表),元素有序且可以重複。

public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable

 

 藍色實線箭頭是指Class繼承關係

 綠色實線箭頭是指interface繼承關係

 綠色虛線箭頭是指介面實現關係

 由上可知LinkedList繼承AbstractSequentialList並且實現了List和Deque,Cloneable, Serializable介面。

、實現 List 介面

List 介面定義了實現該介面的類都必須要實現的一組方法,如下所示,下面我們會對這一系列方法的實現做詳細介紹。

回到頂部

欄位屬性

 View Code

 注意這裡出現了一個 Node 類,這是 LinkedList 類中的一個內部類,集合裡每一個元素就代表一個 Node 類物件,LinkedList 集合就是由許多個 Node 物件類似於手拉著手構成,由此可知,LinkedList是一個雙向連結串列。

 View Code

如圖所示:每個節點都prev都儲存上一個節點的引用,next儲存下一個節點的引用;

  需要注意:第一個節點prev沒有指向的節點,為null,最後一個節點next也沒有指向的節點,也為null

回到頂部

建構函式

①、無參建構函式

public LinkedList() {
}

注意:這裡不需要初始化連結串列的大小,不像ArrayList,需要初始化陣列的大小才能新增元素

②、泛型引數有參建構函式

public LinkedList(Collection<? extends E> c) {
    this();
    addAll(c);
}

 將已有元素的集合Collection 的例項新增到 LinkedList 中,下面詳細介紹

回到頂部

新增元素

①、add(E e) 

 View Code

此時需要注意,如果連結串列為空時,第一個元素的指標和最後一個元素的指標都指向當前節點

②、addFirst(E e)

 View Code

③、addLast(E e)

 View Code

和add(E e) 實現相同,在連結串列尾部新增元素

④、public void add(int index, E element)

  將元素插入指定位置

 View Code

我們發現LinkedList 每次新增元素只是改變元素的上一個指標引用和下一個指標引用,而且沒有擴容。對比於 ArrayList ,需要擴容,而且在中間插入元素時,後面的所有元素都要移動一位,兩者插入元素時的效率差異很大

回到頂部

查詢元素

①、get(int index)

 View Code

②、indexOf(Object o)

返回連結串列中第一個出現指定元素的索引

 View Code

回到頂部

修改元素

 View Code

回到頂部

刪除元素

①、通過索引位置刪除

 View Code

 與ArrayList比較而言,LinkedList的刪除動作不需要“移動”很多資料,從而效率更高

回到頂部

總結

ArrayList和LinkedList在效能上各有優缺點:

1.對ArrayList和LinkedList而言,在列表末尾增加一個元素所花的開銷都是固定的。對ArrayList而言,主要是在內部陣列中增加一項,偶爾可能會導致對陣列擴容;而對LinkedList而言,這個開銷是統一的,都是新建一個Node物件節點。 2.在ArrayList的中間插入或刪除一個元素意味著這個列表中剩餘的元素都會被移動;而在LinkedList的中間插入或刪除一個元素的開銷是固定的,只需要改變元素鄰近節點的上下引用地址。 3.LinkedList不支援高效的隨機元素訪問,因為需要從第一個元素或者最後一個元素開始遍歷查詢;ArrayList可以直接根據索引取到對應位置的元素。 4.ArrayList的空間浪費主要體現在在list列表的結尾預留一定的容量空間,而LinkedList的空間花費則體現在它的每一個元素都需要消耗相當的空間,每個元素不僅儲存了當前元素的實際內容,還有上一個節點和下一個節點的引用

所以在我們進行對元素的增刪查操作的時候,進行查操作時用ArrayList,進行增刪操作的時候最好用LinkedList。

http://www.cgpwyj.cn/ http://news.cgpwyj.cn/ http://item.cgpwyj.cn/ http://www.peacemind.com.cn/ http://news.peacemind.com.cn/ http://item.peacemind.com.cn/ http://www.tasknet.com.cn/ http://news.tasknet.com.cn/ http://item.tasknet.com.cn/ http://www.ownbar.cn/ http://news.ownbar.cn/ http://item.ownbar.cn http://www.shtarchao.net.cn/ http://news.shtarchao.net.cn/ http://item.shtarchao.net.cn/ http://www.metroworld.com.cn/ http://news.metroworld.com.cn/ http://item.metroworld.com.cn/ http://www.cngodo.cn/ http://news.cngodo.cn/ http://item.cngodo.cn/ http://www.gzrdbp.cn/ http://news.gzrdbp.cn/ http://item.gzrdbp.cn/ http://www.dnapt.cn/ http://news.dnapt.cn/ http://item.dnapt.cn/ http://www.ncxlk.cn/ http://news.ncxlk.cn/ http://item.ncxlk.cn/ http://www.zgxxyp.cn/ http://news.zgxxyp.cn/ http://item.zgxxyp.cn/ http://www.sjjdvr.cn/ http://news.sjjdvr.cn/ http://item.sjjdvr.cn/ http://www.sujinkeji.cn/ http://news.sujinkeji.cn/ http://item.sujinkeji.cn/ http://www.zsjxbd.cn/ http://news.zsjxbd.cn/ http://item.zsjxbd.cn/ http://www.yesgas.cn/ http://news.yesgas.cn/ http://item.yesgas.cn/ http://www.quickpass.sh.cn/ http://news.quickpass.sh.cn/ http://item.quickpass.sh.cn/ http://www.jspcrm.cn/ http://news.jspcrm.cn/ http://item.jspcrm.cn/ http://www.yjdwpt.cn/ http://news.yjdwpt.cn/ http://item.yjdwpt.cn/ http://www.henanwulian.cn/ http://news.henanwulian.cn/ http://item.henanwulian.cn/ http://www.hhrshh.cn/ http://news.hhrshh.cn/ http://item.hhrshh.cn/ http://www.gpgold.cn/ http://news.gpgold.cn/ http://item.gpgold.cn/ http://www.jingzhuiyou.cn/ http://news.jingzhuiyou.cn/ http://item.jingzhuiyou.cn/