(1)LinkedList 實現(xiàn)了無序哑子、可重復的List接口卧蜓,并且還實現(xiàn)了Deque(雙端隊列)和Queue(隊列)接口弥奸。LinkedList?底層是基于鏈表結(jié)構(gòu)實現(xiàn)的,實現(xiàn)了雙端隊列的特性(FIFO)和棧的的特性(LIFO)奋早。
1)添加元素的方法源碼分析盛霎?
具體源碼分析如下:
1)創(chuàng)建Node的鏈表數(shù)據(jù)結(jié)構(gòu)
2)添加元素處理Node的結(jié)構(gòu)關系。
首先我們看下LinkedList的構(gòu)造函數(shù)耽装,有參的構(gòu)造函數(shù)和ArrayList參數(shù)不一致愤炸,LinkedList 有參構(gòu)造函數(shù)通過傳遞一個集合,添加到新LinkedList中掉奄。
LinkedList的構(gòu)造函數(shù)
addAll通過將參數(shù)的集合元素轉(zhuǎn)換成數(shù)組(Object[] a = c.toArray())并遍歷這個數(shù)組創(chuàng)建Node鏈表關系规个。
LinkedList的all方法
基于all方法我們在看下LinkedList的add方法的源碼:
LinkedList的add方法
基于上述分析,LinkedList實現(xiàn)了Collection接口的方法挥萌,主要是通過雙端鏈表進行實現(xiàn)绰姻,在這個基礎上擴展了隊列的和棧的功能。
FIFO(先進先出):將元素添加到雙端隊列的末尾引瀑,從雙端隊列的開頭移除元素狂芋。(和之前研究的add方法一樣)
LIFO(先進后出):元素被推入雙端隊列的開頭并從雙端隊列開頭彈出。
在隊列的開頭插入元素