【Java-集合】ArrayList和LinkedList

LinkedList和ArrayList


Level 1

ArrayList:
  1. ArrayList的數據結構基於動態數組
  2. 訪問數組元素(ArrayList)的效率高於訪問鏈表數據(LinkedList)的效率
  3. 在數組元素後添加數據效率高於後者(LinkedList)
LinkedList:
  1. 其數據結構基於鏈表
  2. 增加或刪除鏈表數據(LinkedList)的效率高於數組元素(ArrayLiist)

Level 2

Java-集合繼承結構

ArrayList和LinkedList是Java集合中常用的數據存儲容器;其繼承結構如下所示:
在這裏插入圖片描述
ArrayList類繼承AbstractList類,實現了List接口。
LinkedList類間接繼承了AbstractList類,同時實現了Deque和List接口。(以及兩個可以可無的接口:Cloneable, Serialiazable)

即:ArrayList和LinkedList的區別,來源於

  1. List接口重寫的方法。(區別一)
  2. 自身特有的方法。(區別二)
  3. Deque接口實現方法。(區別三)

Level 3

ArrayList和LinkedList方法上的區別

簡要整理LinkedList對象和ArrayList對象所使用的同名方法,如下圖所示

由Object和Iterable對象聲明的爲普適方法
由其他類聲明,但ArrayList和LinkedList對象都共有的爲公共方法
綠色背底:同名同質方法,該方法在相同類實現
橙色背底:雙方各自定義or實現的同名不同質方法,該方法在各自類中均重新實現(or定義)
藍色背底:一方實現於其他類的同名不同質方法,該方法僅在LinkedList或ArrayList中重新實現(or定義)

在這裏插入圖片描述
與Level 2 中定義的區別來源對應,
區別一:(源於List接口)

  1. List接口所提供的與判斷及查詢相關的八個方法(藍色背底)原封不動地爲LinkedList類繼承。
  2. List接口所提供的與判斷及查詢相關的八個方法(藍色背底)被ArrayList類重新定義or實現。

區別二:(自身重新定義)

  1. 大部分與增刪改查相對應的方法被重寫:增add,刪clear,remove,改set,查indexOf
  2. 部分與判斷及查詢相關的方法被重寫:判斷removeIf,查詢+判斷sort
  3. LinkedList的私有方法(descendingIterator)和ArrayList的私有方法(ensureCapacity)

PS:自此,除containsAll以外的所有與增刪改查及判斷相關的所有同名方法均被重新定義or改寫;即與此相關的方法(除非開發者無聊)實現方式均不同。

區別三:(源於Deque接口, LinkedList具有而ArrayList不具有)

  1. Deque接口貢獻了數個方法用於支持LinkedList數據結構從頭部和尾部操作數據(如插入,刪除),如:
    addFirst, getFirst, offerFirst, peekFirst, pollFirst, removeFirst, removeFirstOccurrance
    addLast, getLast, offerLast, peekLast, pollLast, removeLast, removeLastOccurrance
    以及pop方法(=removeFirst)和push方法(=addFirst)
  2. Deque接口繼承Queue接口的element, offer, peek, poll方法(無太多實際用途,可暫且擱置)

Level 4

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