LinkedList與ArrayList都是List接口的具體實現類。LinkedList與ArrayList在功能上也是大體一致,但是因為兩者具體的實現方式不一致,所以在進行一些相同操作的時候,其效率也是有差別的。
對于抽象的數據結構——線性表而言,線性表分為兩種,一種是順序存儲結構的順序表,另一種是通過指針來描述其邏輯位置的鏈表。
針對于具體的Java實現:
順序存儲的順序表是用數組來實現的,以數組為基礎進行封裝各種操作而形成的List為ArrayList
鏈表是用指針來描述其邏輯位置,在Java中以雙向鏈表為基礎進行封裝各種操作而形成的List為LinkedList
針對插入與刪除操作,ArrayList每插入一個元素,首先需要判斷數組的空間夠不夠,不夠要進行擴容,在有足夠的空間的基礎上,在指定的index位置上插入元素,但是該index及以后的元素都要后移。雖然刪除操作不需要判斷空間夠不夠,但同樣需要該index及以后的元素向前移動,這些移動的操作會增加時間的復雜度。但是對于LinkedList就不一樣,因為使用指針來指示其邏輯的位置,所以插入與刪除的操作的時間復雜度都是 ** O(1) **
雖然對于ArrayList而言,插入與刪除的時間復雜度很高,但是對于查找指定位置的元素這種操作而言,就非常的快,因為可以通過數組直接得到該下標對應的元素。反而,LinkedList而言,無法直接返回指定位置的元素,需要一個個查詢,其時間的復雜度就是 ** O(n) **
與實現ArrayList教程一樣,實現的目的主要在于練手以及掌握官方實現的原理和一些技巧,因此很多需要與其他類配合的方法和功能,就先不在這里實現如iterator
等
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現JSON轉Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應用分析 2017-07-26
- 集合結合數據結構來看看(二) 2017-07-26