摘要:結(jié)構(gòu)體是基于索引的數(shù)據(jù)結(jié)構(gòu),它提供了對其元素的隨機訪問,其性能為。在這樣情況下,其元素搜索的復(fù)發(fā)度為。此外,還有方便的方法和返回。隊列操作接口提供類似隊列的行為實際上擴展了接口這些方法檢索第一個元素并將其從列表中刪除。結(jié)論通常是默認的實現(xiàn)。
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 結(jié)構(gòu)體ArrayList是基于索引的數(shù)據(jù)結(jié)構(gòu),它提供了對其元素的隨機訪問,其性能為O(1)。
LinkedList將數(shù)據(jù)存儲為元素列表,并且每個元素都鏈接到上一個和下一個元素。在這樣情況下,其元素搜索的復(fù)發(fā)度為O(n)。
3.2 操作對LinkedList中的元素進行插入,刪除操作更快,因為當(dāng)元素添加到集合內(nèi)的某個位置時,不需要調(diào)整數(shù)組的大小或更新索引,只需更改前后元素的pre和next指針即可。
3.3 內(nèi)存的使用情況LinkedList的內(nèi)存占用比ArrayList更多,因為在每一個接口都需要存儲兩個引用,一個用于記錄前一個元素,一個用于記錄后一個元素。而ArrayList中僅需要保持數(shù)據(jù)和它的索引。
4. 用法以下是一些代碼示例,展示了如何使用LinkedList:
4.1 創(chuàng)建LinkedList4.2 添加元素
LinkedList實現(xiàn)了List和Deque接口,除了標(biāo)準(zhǔn)的add()和addAll(),還提供了addFirst()和addLast(),它們分別在開頭或結(jié)尾添加一個元素。
4.3 刪除元素與元素添加類似,LinkedList還提供了removeFirst()和removeLast()。
此外,還有方便的方法removeFirstOccurence()和removeLastOccurence()返回boolean。如果collection中包含了指定的元素,則返回true。
4.4 隊列操作Deque接口提供類似隊列的行為(實際上Deque擴展了Queue接口):
linkedList.poll(); linkedList.pop();
這些方法檢索第一個元素并將其從列表中刪除。
poll()和pop()的區(qū)別是當(dāng)列表為空時,pop就會拋出NoSuchElementException()異常,而poll則會返回null。
linkedList.push(Object o);
push將在列表頭添加一個元素。
LinkedList還有許多其他操作,使用方式與List和Deque一樣。
5. 結(jié)論ArrayList通常是默認的List實現(xiàn)。
但是,在某些使用情況下,使用LinkedList會是更好的選擇。例如需要頻繁的插入,刪除,更新列表元素時。
Author :笑笑粑粑
曾用網(wǎng)名:TinyKing
微信公眾號:Java碼農(nóng)
知乎專欄: 愛笑笑愛分享
個人博客: 愛笑笑,愛生活
自我評價: 一個愛好廣泛的CRUD程序猿 ^_^
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/73120.html
摘要:單線程集合本部分將重點介紹非線程安全集合。非線程安全集合框架的最新成員是自起推出的。這是標(biāo)準(zhǔn)的單線程陣營中唯一的有序集合。該功能能有效防止運行時造型。檢查個集合之間不存在共同的元素。基于自然排序或找出集合中的最大或最小元素。 【編者按】本文作者為擁有十年金融軟件開發(fā)經(jīng)驗的 Mikhail Vorontsov,文章主要概覽了所有標(biāo)準(zhǔn) Java 集合類型。文章系國內(nèi) ITOM 管理平臺 O...
摘要:盡可能避免使用,會導(dǎo)致復(fù)制數(shù)組,降低效率。再額外提一點,我們常用的另一個容器也是推薦要初始化長度從而避免擴容。 showImg(https://segmentfault.com/img/remote/1460000019659723); 前言 前不久幫同事一起 review 一個 job 執(zhí)行緩慢的問題時發(fā)現(xiàn)不少朋友在擼碼實現(xiàn)功能時還是有需要細節(jié)不夠注意,于是便有了這篇文章。 Arra...
摘要:編程思想第版這本書要常讀,初學(xué)者可以快速概覽,中等程序員可以深入看看,老鳥還可以用之回顧的體系。以下視頻整理自慕課網(wǎng)工程師路徑相關(guān)免費課程。 我自己總結(jié)的Java學(xué)習(xí)的系統(tǒng)知識點以及面試問題,目前已經(jīng)開源,會一直完善下去,歡迎建議和指導(dǎo)歡迎Star: https://github.com/Snailclimb/Java-Guide 筆者建議初學(xué)者學(xué)習(xí)Java的方式:看書+視頻+實踐(初...
摘要:是棧,它繼承于。滿二叉樹除了葉結(jié)點外每一個結(jié)點都有左右子葉且葉子結(jié)點都處在最底層的二叉樹。沒有鍵值相等的節(jié)點。這是數(shù)據(jù)庫選用樹的最主要原因。 在我們學(xué)習(xí)Java的時候,很多人會面臨我不知道繼續(xù)學(xué)什么或者面試會問什么的尷尬情況(我本人之前就很迷茫)。所以,我決定通過這個開源平臺來幫助一些有需要的人,通過下面的內(nèi)容,你會掌握系統(tǒng)的Java學(xué)習(xí)以及面試的相關(guān)知識。本來是想通過Gitbook的...
摘要:若遇到哈希沖突,則將沖突的值加到鏈表中即可。之后相比于之前的版本,之后在解決哈希沖突時有了較大的變化,當(dāng)鏈表長度大于閾值默認為時,將鏈表轉(zhuǎn)化為紅黑樹,以減少搜索時間。有序,唯一紅黑樹自平衡的排序二叉樹。 本文是最最最常見Java面試題總結(jié)系列第三周的文章。主要內(nèi)容: Arraylist 與 LinkedList 異同 ArrayList 與 Vector 區(qū)別 HashMap的底層...
閱讀 2486·2021-10-19 11:45
閱讀 2464·2021-09-30 09:56
閱讀 1432·2021-09-30 09:47
閱讀 591·2019-08-30 15:53
閱讀 1834·2019-08-30 15:44
閱讀 584·2019-08-30 12:52
閱讀 1084·2019-08-30 11:16
閱讀 1605·2019-08-29 16:36