一點一點看JDK源碼(六)java.util.LinkedList前篇之鏈表概要

一點一點看JDK源碼(六)java.util.LinkedList前篇之鏈表概要html

 

liuyuhang原創,未經容許禁止轉載java

本文舉例使用的是JDK8的API算法

 

目錄:一點一點看JDK源碼(〇)

 

1.什麼是鏈表 數組

 

  鏈表是一種常見的數據結構,屬於一種線性表。數據結構

  雖然說鏈表是線性表,可是其儲存的方式並不是是線性的,而是節點(Node)方式存儲的。函數

  每個節點都含有一個指針,指向下一個節點。post

  同時每個節點都存有自身的數據信息。url

  

  鏈表有點像衣服的拉鍊,是一個扣一個的,每兩個之間都有一個間隔,要想獲取某個位置的數據,spa

  必須逐個獲取下一個節點。設計

 

  由此,鏈表的數據添加,默認是添加在該鏈的末尾的,並不須要得到該鏈表的全部數據,不須要知道

  鏈表的長度,也不須要獲取鏈表的所有索引之類的東西。

 

  所以鏈表中的數據建立和尾插入效率是極高的,又由於沒有一個獲取所有索引的方式,所以在鏈表

  中要查詢某些內容,必須一個一個尋找,難以得到某個位置的信息,查詢較慢

 

  雖說鏈表是一環扣一環的,可是首節點能夠得到次節點信息,依次遞歸可以得到整個鏈表的全部信息。

  因此,實際上鍊表是一種遞歸結構,首節點實際上存有全部節點的信息了。

 

  不放圖了,自行百度或百科!!

 

2.鏈表的構成要素

 

  根據鏈表的定義模式,鏈表的構成要素的本質,是節點(Node)的設計。對於鏈表的全部特性,都是基於

  Node自己或對Node的操做而造成的。

 

  Node的構成模式簡單說有幾種:

    2.1.Node含有數據變量,下一個節點的指針;

    2.2.Node含有數據變量,下一個節點的指針,上一個節點的指針;

    2.3.Node含有數據變量,下一個節點的指針,上一個節點的指針;最後一個節點的指針指向首節點;

    2.4.Node含有數據變量,下一個節點的指針,上一個節點的指針;自身惟一的序號(inde)或索引(hash)

 

  以上列舉的四種方式中,特性是有所變化的。

    2.1.所指本質上是一個單向鏈表

    2.2.所指本質上是一個雙向鏈表

    2.3.所指本質上是一個環形鏈表(首尾相接的噬身之蛇的感受),能夠是自身的結構,能夠是插入數據時構成。

    2.4.所指本質上是一個下降建立效率,提升查詢效率的鏈表數組,或鏈表hash

 

  同時,根據鏈表的指針定義方式,指針數量,指針標準的不一樣,能夠有諸多的性質。

  如線性鏈表,非線性鏈表。

  樹形鏈表,圖性鏈表。

  單向鏈表,雙向鏈表,環形鏈表。

 

3.鏈表的操做構成

 

  鏈表雖然是一種數據結構,本質上也是容器,做爲容器,一定有須要通常容器性操做。如:

    建立,新增,插入,刪除,修改,查詢,清空,轉換,排序,遍歷等基礎操做。

 

  又由於鏈表的自身特性,能夠有一些特性操做。如:

    獲取首元素,獲取尾元素。

    獲取上一個元素,獲取下一個元素。

    彈出首元素,彈出尾元素。

 

    同時也能夠用一些自定義的方式來獲取鏈表元素,如節點分組獲取,如跳躍式獲取等,看腦洞有多大了!

 

4.java的鏈表實現java.util.LinkedList

 

  下面列舉一些java中LinkedList的一些特性。

 

  • LinkedList 是一個繼承於AbstractSequentialList的雙向鏈表。它也能夠被看成堆棧、隊列或雙端隊列進行操做。
  • LinkedList 實現 List 接口,能對它進行隊列操做。
  • LinkedList 實現 Deque 接口,即能將LinkedList看成雙端隊列使用。
  • LinkedList 實現了Cloneable接口,即覆蓋了函數clone(),能克隆。
  • LinkedList 實現java.io.Serializable接口,這意味着LinkedList支持序列化,能經過序列化去傳輸。
  • LinkedList 是非同步的。

 

關於java中LinkedList的設計,下篇在更!

 

本身手寫了個鏈表,代碼比較少,能夠看下

 

算法是什麼(二)手寫個鏈表(java)

 

以上!

相關文章
相關標籤/搜索