LinkedList
是一個雙向鏈表, 實現了List
和Deque
接口。它實現全部可選的list操做,而且存儲對象能夠爲null
。java
LinkedList
具備如下特色:數組
Iterator
和ListIterator
迭代器是快速失敗的(這意味着在迭代器建立以後,若是修改了列表,將拋出一個ConcurrentModificationException
)雖然LinkedList
沒有同步,可是咱們能夠經過調用Collections.synchronizedList
方法建立它的同步版本,如:微信
List list = Collections.synchronizedList(new LinkedList(...));
雖然它們都實現了List
接口,但它們具備不用的語義,這將影響咱們使用哪個。數據結構
ArrayList
是基於索引的數據結構,它提供了對其元素的隨機訪問,其性能爲O(1)。性能
LinkedList
將數據存儲爲元素列表,而且每一個元素都連接到上一個和下一個元素。在這樣狀況下,其元素搜索的復發度爲O(n)。指針
對LinkedList
中的元素進行插入,刪除操做更快,由於當元素添加到集合內的某個位置時,不須要調整數組的大小或更新索引,只需更改先後元素的pre
和next
指針便可。code
LinkedList
的內存佔用比ArrayList
更多,由於在每個接口都須要存儲兩個引用,一個用於記錄前一個元素,一個用於記錄後一個元素。而ArrayList
中僅須要保持數據和它的索引。對象
如下是一些代碼示例,展現瞭如何使用LinkedList
:索引
LinkedList<Object> linkedList = new LinkedList<>();
LinkedList
實現了List
和Deque
接口,除了標準的add()
和addAll()
,還提供了addFirst()
和addLast()
,它們分別在開頭或結尾添加一個元素。接口
與元素添加相似,LinkedList
還提供了removeFirst()
和removeLast()
。
此外,還有方便的方法removeFirstOccurence()
和removeLastOccurence()
返回boolean
。若是collection
中包含了指定的元素,則返回true
。
Deque
接口提供相似隊列的行爲(實際上Deque
擴展了Queue
接口):
linkedList.poll(); linkedList.pop();
這些方法檢索第一個元素並將其從列表中刪除。poll()
和pop()
的區別是當列表爲空時,pop
就會拋出NoSuchElementException()
異常,而poll
則會返回null
。
linkedList.push(Object o);
push
將在列表頭添加一個元素。
LinkedList
還有許多其餘操做,使用方式與List
和Deque
同樣。
ArrayList
一般是默認的List
實現。
可是,在某些使用狀況下,使用LinkedList
會是更好的選擇。例如須要頻繁的插入,刪除,更新列表元素時。
Author :笑笑粑粑
曾用網名:TinyKing
微信公衆號:Java碼農
知乎專欄: 愛笑笑愛分享
我的博客: 愛笑笑,愛生活 自我評價: 一個愛好普遍的CRUD程序猿 ^_^