Java LinkedList指南
1. 介紹
LinkedList是一個雙向鏈表, 實現(xiàn)了List和Deque接口。它實現(xiàn)所有可選的list操作,并且存儲對象可以為null。
2. 特點
LinkedList具有以下特點:
- 查到列表中的元素,需要從頭至尾的遍歷列表
- 沒有同步
- 它的Iterator和ListIterator迭代器是快速失敗的(這意味著在迭代器創(chuàng)建之后,如果修改了列表,將拋出一個ConcurrentModificationException)
- 每個元素都是一個節(jié)點,它保留對下一個和前一個節(jié)點的引用
- 維護了插入順序
雖然LinkedList沒有同步,但是我們可以通過調(diào)用Collections.synchronizedList方法創(chuàng)建它的同步版本,如:
List list = Collections.synchronizedList(new LinkedList(...));3. 與ArrayList比較
雖然它們都實現(xiàn)了List接口,但它們具有不用的語義,這將影響我們使用哪一個。
3.1 結構體
ArrayList是基于索引的數(shù)據(jù)結構,它提供了對其元素的隨機訪問,其性能為O(1)。
LinkedList將數(shù)據(jù)存儲為元素列表,并且每個元素都鏈接到上一個和下一個元素。在這樣情況下,其元素搜索的復發(fā)度為O(n)。
3.2 操作
對LinkedList中的元素進行插入,刪除操作更快,因為當元素添加到集合內(nèi)的某個位置時,不需要調(diào)整數(shù)組的大小或更新索引,只需更改前后元素的pre和next指針即可。
3.3 內(nèi)存的使用情況
LinkedList的內(nèi)存占用比ArrayList更多,因為在每一個接口都需要存儲兩個引用,一個用于記錄前一個元素,一個用于記錄后一個元素。而ArrayList中僅需要保持數(shù)據(jù)和它的索引。
4. 用法
以下是一些代碼示例,展示了如何使用LinkedList:
4.1 創(chuàng)建
LinkedList<Object> linkedList = new LinkedList<>();4.2 添加元素
LinkedList實現(xiàn)了List和Deque接口,除了標準的add()和addAll(),還提供了addFirst()和addLast(),它們分別在開頭或結尾添加一個元素。
4.3 刪除元素
與元素添加類似,LinkedList還提供了removeFirst()和removeLast()。
此外,還有方便的方法removeFirstOccurence()和removeLastOccurence()返回boolean。如果collection中包含了指定的元素,則返回true。
4.4 隊列操作
Deque接口提供類似隊列的行為(實際上Deque擴展了Queue接口):
linkedList.poll(); linkedList.pop();這些方法檢索第一個元素并將其從列表中刪除。
poll()和pop()的區(qū)別是當列表為空時,pop就會拋出NoSuchElementException()異常,而poll則會返回null。
push將在列表頭添加一個元素。
LinkedList還有許多其他操作,使用方式與List和Deque一樣。
5. 結論
ArrayList通常是默認的List實現(xiàn)。
但是,在某些使用情況下,使用LinkedList會是更好的選擇。例如需要頻繁的插入,刪除,更新列表元素時。
Author :笑笑粑粑
曾用網(wǎng)名:TinyKing
微信公眾號:Java碼農(nóng)
知乎專欄: 愛笑笑愛分享
個人博客: 愛笑笑,愛生活
自我評價: 一個愛好廣泛的CRUD程序猿 ^_^
總結
以上是生活随笔為你收集整理的Java LinkedList指南的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: nginx官方模块之http_sub_s
- 下一篇: 报表中如何控制附件的上传和下载权限