LinkedList和ArrayList
Level 1
ArrayList:
- ArrayList的數據結構基於動態數組
- 訪問數組元素(ArrayList)的效率高於訪問鏈表數據(LinkedList)的效率
- 在數組元素後添加數據效率高於後者(LinkedList)
LinkedList:
- 其數據結構基於鏈表
- 增加或刪除鏈表數據(LinkedList)的效率高於數組元素(ArrayLiist)
Level 2
Java-集合繼承結構
ArrayList和LinkedList是Java集合中常用的數據存儲容器;其繼承結構如下所示:
ArrayList類繼承AbstractList類,實現了List接口。
LinkedList類間接繼承了AbstractList類,同時實現了Deque和List接口。(以及兩個可以可無的接口:Cloneable, Serialiazable)
即:ArrayList和LinkedList的區別,來源於
- List接口重寫的方法。(區別一)
- 自身特有的方法。(區別二)
- Deque接口實現方法。(區別三)
Level 3
ArrayList和LinkedList方法上的區別
簡要整理LinkedList對象和ArrayList對象所使用的同名方法,如下圖所示
由Object和Iterable對象聲明的爲普適方法
由其他類聲明,但ArrayList和LinkedList對象都共有的爲公共方法
綠色背底:同名同質方法,該方法在相同類實現
橙色背底:雙方各自定義or實現的同名不同質方法,該方法在各自類中均重新實現(or定義)
藍色背底:一方實現於其他類的同名不同質方法,該方法僅在LinkedList或ArrayList中重新實現(or定義)
與Level 2 中定義的區別來源對應,
區別一:(源於List接口)
- List接口所提供的與判斷及查詢相關的八個方法(藍色背底)原封不動地爲LinkedList類繼承。
- List接口所提供的與判斷及查詢相關的八個方法(藍色背底)被ArrayList類重新定義or實現。
區別二:(自身重新定義)
- 大部分與增刪改查相對應的方法被重寫:增add,刪clear,remove,改set,查indexOf。
- 部分與判斷及查詢相關的方法被重寫:判斷removeIf,查詢+判斷sort。
- LinkedList的私有方法(descendingIterator)和ArrayList的私有方法(ensureCapacity)
PS:自此,除containsAll以外的所有與增刪改查及判斷相關的所有同名方法均被重新定義or改寫;即與此相關的方法(除非開發者無聊)實現方式均不同。
區別三:(源於Deque接口, LinkedList具有而ArrayList不具有)
- Deque接口貢獻了數個方法用於支持LinkedList數據結構從頭部和尾部操作數據(如插入,刪除),如:
addFirst, getFirst, offerFirst, peekFirst, pollFirst, removeFirst, removeFirstOccurrance
addLast, getLast, offerLast, peekLast, pollLast, removeLast, removeLastOccurrance
以及pop方法(=removeFirst)和push方法(=addFirst) - Deque接口繼承Queue接口的element, offer, peek, poll方法(無太多實際用途,可暫且擱置)
Level 4