LinkedList與ArrayList都是List接口的具體實現類。LinkedList與ArrayList在功能上也是大體一致,但是因為兩者具體的實現方式不一致,所以在進行一些相同操作的時候,其效率也是有差別的。
對于抽象的數據結構——線性表而言,線性表分為兩種,一種是順序存儲結構的順序表,另一種是通過指針來描述其邏輯位置的鏈表。
針對于具體的Java實現:

  • 順序存儲的順序表是用數組來實現的,以數組為基礎進行封裝各種操作而形成的List為ArrayList

  • 鏈表是用指針來描述其邏輯位置,在Java中以雙向鏈表為基礎進行封裝各種操作而形成的List為LinkedList

針對插入與刪除操作,ArrayList每插入一個元素,首先需要判斷數組的空間夠不夠,不夠要進行擴容,在有足夠的空間的基礎上,在指定的index位置上插入元素,但是該index及以后的元素都要后移。雖然刪除操作不需要判斷空間夠不夠,但同樣需要該index及以后的元素向前移動,這些移動的操作會增加時間的復雜度。但是對于LinkedList就不一樣,因為使用指針來指示其邏輯的位置,所以插入與刪除的操作的時間復雜度都是 ** O(1) **

雖然對于ArrayList而言,插入與刪除的時間復雜度很高,但是對于查找指定位置的元素這種操作而言,就非常的快,因為可以通過數組直接得到該下標對應的元素。反而,LinkedList而言,無法直接返回指定位置的元素,需要一個個查詢,其時間的復雜度就是 ** O(n) **

與實現ArrayList教程一樣,實現的目的主要在于練手以及掌握官方實現的原理和一些技巧,因此很多需要與其他類配合的方法和功能,就先不在這里實現如iterator

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網站設計培訓,網站建設培訓學習是年輕人改變自己的最好方式