一點一點看JDK源碼(六)java.util.LinkedList前篇之鏈表概要html
liuyuhang原創,未經容許禁止轉載java
本文舉例使用的是JDK8的API算法
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的一些特性。
關於java中LinkedList的設計,下篇在更!
本身手寫了個鏈表,代碼比較少,能夠看下
以上!