LinkedList源碼分析

從源碼中可以看出來,LinkedList是基於雙向循環鏈表的實現,且頭結點中不存放數據.
他是由靜態內部類Node<E>來實現的,緩存一個節點的,前節點和後節點的引用。源碼如下:

1.LinkedList實現了Serializable接口,也支持支持序列化
2.LinkedList是非線程安全的,只適合在單線程下使用。
3.根據索引來隨機訪問(根據索引隨機訪問速度很慢),看看源碼就知道了原因:

下面是根據索引隨機訪問的方法:


我們再進入node(index)方法看看它究竟是怎麼執行的:


上面紅色字的部分:它將LinkedList的size做了右移位的操作,相當於去了 size/2 來跟索引進行比較。但是還是得一個一個的移動才能得到該值。效率也提高不了多少。

4.用for循環增強,和迭代器訪問比for循環訪問快很多的原因:查看源碼得知,用迭代器訪問 就是在基類中調用了listIterator(int index),只不過index默認爲0.
源碼如下:

和JDK提供的listIterator(int index)接口底層實現是一樣的。

查看一下ListItr:


這裏用到了封裝在LinkedList裏面的節點對象,直接取到下一個節點的元素。就不用像直接用普通for循環那樣,再從開始比較了,進行遍歷。所以時間比一般的for循環快。for循環加強底層也是用的迭代器,所以它也比普通的for循環快。

5.LinkedList是基於鏈表實現的,因此插入刪除效率高,查找效率低(雖然有一個加速動作)






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章