ArrayList和LinkedList區別 3
簡說
arraylist

- 基于陣列,需要連續記憶體
- 隨機訪問快(指根據下標訪問)
- 尾部插入、洗掉性能可以,其它部分插入、洗掉都會移動資料,因此性能會低
- 可以利用 cpu 快取,區域性原理
linkedlist

- 基于雙向鏈表,無需連續記憶體
- 隨機訪問慢(要沿著鏈表遍歷)
- 頭尾插入洗掉性能高
- 占用記憶體多
細說
由于arraylist底層是陣列,所以元素必須連續存盤,當要進行隨機查找,其實是根據arraylist連續存盤中的下標查找,這操作速度很快,
由于linkedlist底層是雙向鏈表,所以存盤是無序的,占用記憶體多(大約同樣存盤量,占用記憶體是arraylist的4倍左右),進行隨機查找時,得一個一個查,所以訪問效率低很多,
且arraylist底層實作了一個RandomAccess(隨機訪問介面),而linkedlist沒有實作,實作這個介面就可以通過下標去找,沒有實作就只有通過迭代器找
list集合去重都有哪些方法 3
-
雙重for回圈
-
利用list集合中contains方法回圈遍歷,清空,重新添加
-
利用HashSet不能重復特性,但不能保證順序,只有額外加判斷條件保證順序
-
利用Java8特性stream流進行list去重
-
(最佳)使用LinkedHashSet洗掉ArrayList中的重復元素
可以做到即洗掉了重復資料,又保持添加到其中的資料的順序,
陣列和鏈表分別適用于什么場景,為什么 3
陣列:陣列是將元素在記憶體中連續存盤的;它的優點:因為資料是連續存盤的,記憶體地址連續,所以在查找資料的時候效率比較高;它的缺點:在存盤之前,我們需要申請一塊連續的記憶體空間,并且在編譯的時候就必須確定好它的空間的大小,在運行的時候空間的大小是無法隨著你的需要進行增加和減少而改變的,當資料兩比較大的時候,有可能會出現越界的情況,資料比較小的時候,又有可能會浪費掉記憶體空間,在改變資料個數時,增加、插入、洗掉資料效率比較低,
鏈表:鏈表是動態申請記憶體空間,不需要像陣列需要提前申請好記憶體的大小,鏈表只需在用的時候申請就可以,根據需要來動態申請或者洗掉記憶體空間,對于資料增加和洗掉以及插入比陣列靈活,還有就是鏈表中資料在記憶體中可以在任意的位置,通過應用來關聯資料(就是通過存在元素的指標來聯系),
其實這兩者最典型的實作就是arraylist和linkedlist
陣列應用場景:資料比較少;經常做的運算是按序號訪問資料元素;陣列更容易實作,任何高級語言都支持;構建的線性表較穩定,
鏈表應用場景:對線性表的長度或者規模難以估計;頻繁做插入洗掉操作;構建動態性比較強的線性表,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/506126.html
標籤:其他
下一篇:裝飾器第1天
