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