集合List Map和Set詳解

2021-10-23 16:13:57 字數 1105 閱讀 9275

list是乙個有序,可以存放相同資料集合。

其中的子類:

底層結構是陣列,所以查詢速度比較快,增刪比較慢,執行緒是不安全的。

底層結構是雙向鍊錶,所以增刪快,查詢慢,執行緒安全。

底層與arraylist一樣,執行緒是安全的,但是因為效率較慢,已經很少使用了。

set是乙個無序集合,其中存放的資料是不可重複的。

其中的子類:

執行緒不安全,無序標識唯一,hashset底層其實基於hashmap實現的,通過hashmap儲存資料

底層是紅黑樹資料結構,也就說是一棵自平衡的排序二叉樹,這樣就可以保證當需要快速檢索指定節點。

treeset 底層實際使用的儲存容器就是 treemap,底層的方法基本是靠treemap實現。

map 是乙個無序集合,以鍵值對的方式存放資料,鍵物件不允許重複,值物件可以重複。

其中的子類:

在jdk7以前 底層是陣列加鍊表實現,到了jdk8,引入了紅黑樹,我們當鍊表的長度大於8個時,開始轉變紅黑樹而當紅黑樹的節點個數小於6個(預設值)以後,又開始使用鍊錶。所以在jdk8以後放棄了頭插法,繼而使用尾插法,我們在進行尾插法的時候,還能夠遍歷一遍size(),來判斷要不要進行樹的轉變。

資料存放在鍵值對 entry中,jdk8以後被稱為node

hashmap可以存null鍵和null值,不保證元素的順序恆久不變,它的底層使用的是陣列和鍊錶,通過hashcode()方法和equals方法保證鍵的唯一性

通過拉鍊法解決hash衝突

實現不同步 執行緒不安全、

底層是紅黑樹

treemap實現sortmap介面,能夠把它儲存的記錄根據鍵排序,

預設是按鍵值的公升序排序,也可以指定排序的比較器,

當用iterator遍 歷treemap時,得到的記錄是排過序的。

通過維護乙個執行於所有條目的雙向鍊錶,保證了集合元素迭代的順序,這個順序可以是插入順序或者訪問順序.

可以認為是hashmap+linkedlist,也就是說,它使用hashmap運算元據結構,也用linkedlist維護插入元素的先後順序.

key和value都允許為空

key重複會覆蓋,value可以重複

有序的linkedhashmap是非執行緒安全的

List,Map和Set的區別

list特點 元素有放入順序,元素可重複 map特點 元素按鍵值對儲存,無放入順序 set特點 元素無放入順序,元素不可重複 注意 元素雖然無放入順序,但是元素在set中的位置是有該元素的hashcode決定的,其位置其實是固定的 list介面有三個實現類 linkedlist,arraylist,...

List,Map和Set的遍歷方式

public class listforeach 方法一 在for迴圈中使用entries實現map的遍歷 最常見也是大多數情況下用的最多的,一般在鍵值對都需要使用 map map new hashmap map.put 熊大 棕色 map.put 熊二 黃色 for map.entryentry ...

set集合使用詳解

曾經年少愛追夢,一心只想往前飛。那會高二,剛剛接觸c語言,一發不可收拾,還記得當時為了乙個想法和朋友一起想到半夜。現在我還是那個少年,那個又菜又愛玩的少年。寫法 說明set type s 定義乙個集合s s.insert item 把item放入s集合裡面 s.erase item 刪除元素item...