集合 list set map 彙總

2021-10-13 22:42:59 字數 2069 閱讀 8075

list—是乙個有序的集合,可以包含重複的元素,提供了按索引訪問的方式,它繼承collection。

list有兩個重要的實現類:arraylist和linkedlist ,這兩個都是執行緒不安全的,vector和copyonwritearraylist是執行緒安全的

arraylist: 可以看作是能夠自動增長容量的陣列,新增資料的時候需要判斷當前是否有空閒空間儲存,記憶體為一連續的位址, 可隨機訪問, 查詢速度快

linklist:是乙個雙鏈表,在新增和刪除元素時具有比arraylist更好的效能.但在get與set方面弱於arraylist.當然,這些對比都是指資料量很大或者操作很頻繁

鍊錶不需要連續的空間, 大小不確定,通過node指標來指向下乙個節點,擴充套件性強, 只能順著指標的方向查詢, 速度較慢

vector:內部是使用 synchronized 來保證執行緒安全的,並且鎖的粒度比較大,都是方法級別的鎖,在併發量高的時候,很容易發生競爭,併發效率相對比較低

copyonwritearraylist:copyonwrite 的 arraylist,copyonwrite 的意思是說,當容器需要被修改的時候,不直接修改當前容器,而是先將當前容器進行 copy,複製出乙個新的容器,然後修改新的容器,完成修改之後,再將原容器的引用指向新的容器。這樣就完成了整個修改過程

copyonwritearraylist 利用了「不變性」原理,因為容器每次修改都是建立新副本,所以對於舊容器來說,其實是不可變的,也是執行緒安全的,無需進一步的同步操作。我們可以對 copyonwrite 容器進行併發的讀,而不需要加鎖,因為當前容器不會新增任何元素,也不會有修改。

copyonwritearraylist 的所有修改操作(add,set等)都是通過建立底層陣列的新副本來實現的,所以 copyonwrite 容器也是一種讀寫分離的思想體現,讀和寫使用不同的容器。

copyonwritearraylist 分別是寫時複製和迭代期間允許修改集合內容。我們還介紹了它的三個缺點,分別是記憶體占用問題,在元素較多或者複雜的情況下複製的開銷大問題,以及資料一致性問題;

add 方法的作用是往 copyonwritearraylist 中新增元素,是一種修改操作。首先需要利用 reentrantlock 的 lock 方法進行加鎖,獲取鎖之後,並複製乙個新陣列,增加操作在新陣列上完成,然後將 array 指向到新陣列,最後解鎖。

get 相關的操作沒有加鎖,保證了讀取操作的高速

set:是一種無序(儲存順序)不可重複(元素)的集合,要實現排序 1、可 實現comparable(重寫compareto方法) 2、指定排序方式 comparato

set集合是執行緒不安全的,怎麼實現執行緒安全:

1.setsynset = collections.synchronizedset(new hashset<>());

2.setcopyset = new copyonwritearrayset<>();

hashset:內部封裝了hashmap。就是用hashmap的key位來儲存值.,效率要高於treeset,因為hashset採用雜湊演算法快速對集合進行增刪改查 時間複雜度更是幾乎接近o(1),但內部無序

treeset:基於treemap實現,treemap本質就是紅黑樹。所以treeset其實於是基於紅黑樹的,內部有序,可根據指定規則去排序。但效率要比較hashset低。時間複雜度位o(log n)

linkedhashset:底層linkedhashmap

map和set的關係

可以說關係是很密切了,雖然map中存放的時鍵值對,set中存放的是單個物件,但如果把value看做key的附庸,key在**,value就在**,這樣就可以像對待set一樣來對待map了。事實上,map提供了乙個entry內部類來封裝key-value對,再計算entry儲存時則只考慮entry封裝的key。

集合List Set Map詳解

list set map是否繼承自collection介面?list set是map不是,list是線性結構的容器,底層使用陣列實現,使用於按數值索引訪問元素的情形 set儲存零散的元素且不允許有重複的元素 類似數學中的集合 map儲存的是key value鍵值對。闡述arraylist vecto...

Dart集合型別List Set Map

常用屬性 length 長度 reverse 翻轉,注意翻轉之後的返回值不是list型別的,需要加tolist轉換為list型別 isempty 是否為空 isnotempty 是否不為空 常用方法 add 增加 addall 拼接陣列 indexof 查詢 傳入具體值 注意 查詢不到返回 1 re...

java 集合(list set map)的特點

今天趁有空特意從網上整理資料方便日後回憶。一 list 有順序以線性方式儲存,可以存放重複物件 執行緒安全方法 list list collections.synchronizedlist new linkedlist linkedlist 雙向鍊錶實現儲存 索引資料慢插入數度較快 執行緒不安全 比...