java所有集合的區別

2021-08-22 11:29:32 字數 2756 閱讀 6370

1.hashmap去掉了hashtable 的contains方法,但是加上了containsvalue()和containskey()方法。

2.hashtable同步的,而hashmap是非同步的,效率上逼hashtable要高。

3.hashmap允許空鍵值,而hashtable不允許。

vector和arraylist很像,都是基於陣列實現的集合,它和arraylist的主要區別在於

vector是執行緒安全的,而arraylist不是

由於vector中的方法基本都是synchronized的,其效能低於arraylist

vector可以定義陣列長度擴容的因子,arraylist不能,arraylist在記憶體不夠時預設是擴充套件50% + 1個,vector是預設擴充套件1倍。

vector提供indexof(obj, start)介面,arraylist沒有。

vector屬於執行緒安全級別的,但是大多數情況下不使用vector,因為執行緒安全需要更大的系統開銷。

list:

1.可以允許重複的物件。

2.可以插入多個null元素。

3.是乙個有序容器,保持了每個元素的插入順序,輸出的順序就是插入的順序。

4.常用的實現類有 arraylist、linkedlist 和 vector。arraylist 最為流行,它提供了使用索引的隨意訪問,而 linkedlist 則對於經常需要從 list 中新增或刪除元素的場合更為合適。

set:

1.不允許重複物件

2. 無序容器,你無法保證每個元素的儲存順序,treeset通過 comparator 或者 comparable 維護了乙個排序順序。

3. 只允許乙個 null 元素

4.set 介面最流行的幾個實現類是 hashset、linkedhashset 以及 treeset。最流行的是基於 hashmap 實現的 hashset;treeset 還實現了 sortedset 介面,因此 treeset 是乙個根據其 compare() 和 compareto() 的定義進行排序的有序容器。

map:

1.map不是collection的子介面或者實現類。map是乙個介面。

2.map 的 每個 entry 都持有兩個物件,也就是乙個鍵乙個值,map 可能會持有相同的值物件但鍵物件必須是唯一的。

3. treemap 也通過 comparator 或者 comparable 維護了乙個排序順序。

4. map 裡你可以擁有隨意個 null 值但最多只能有乙個 null 鍵。

5.map 介面最流行的幾個實現類是 hashmap、linkedhashmap、hashtable 和 treemap。(hashmap、treemap最常用)

vector和arraylist

1,vector是執行緒同步的,所以它也是執行緒安全的,而arraylist是執行緒非同步的,是不安全的。如果不考慮到執行緒的安全因素,一般用arraylist效率比較高。

2,如果集合中的元素的數目大於目前集合陣列的長度時,vector增長率為目前陣列長度的100%,而arraylist增長率為目前陣列長度的50%。如果在集合中使用資料量比較大的資料,用vector有一定的優勢。

3,如果查詢乙個指定位置的資料,vector和arraylist使用的時間是相同的,如果頻繁的訪問資料,這個時候使用vector和arraylist都可以。而如果移動乙個指定位置會導致後面的元素都發生移動,這個時候就應該考慮到使用linklist,因為它移動乙個指定位置的資料時其它元素不移動。

arraylist 和vector是採用陣列方式儲存資料,此陣列元素數大於實際儲存的資料以便增加和插入元素,都允許直接序號索引元素,但是插入資料要涉及到陣列元素移動等記憶體操作,所以索引資料快,插入資料慢,vector由於使用了synchronized方法(執行緒安全)所以效能上比arraylist要差,linkedlist使用雙向鍊錶實現儲存,按序號索引資料需要進行向前或向後遍歷,但是插入資料時只需要記錄本項的前後項即可,所以插入數度較快。

arraylist和linkedlist

1.arraylist是實現了基於動態陣列的資料結構,linkedlist基於鍊錶的資料結構。

2.對於隨機訪問get和set,arraylist覺得優於linkedlist,因為linkedlist要移動指標。

3.對於新增和刪除操作add和remove,linedlist比較佔優勢,因為arraylist要移動資料。 這一點要看實際情況的。若只對單條資料插入或刪除,arraylist的速度反而優於linkedlist。但若是批量隨機的插入刪除資料,linkedlist的速度大大優於arraylist. 因為arraylist每插入一條資料,要移動插入點及之後的所有資料。

hashmap與treemap

1、 hashmap通過hashcode對其內容進行快速查詢,而treemap中所有的元素都保持著某種固定的順序,如果你需要得到乙個有序的結果你就應該使用treemap(hashmap中元素的排列順序是不固定的)。

2、在map 中插入、刪除和定位元素,hashmap是最好的選擇。但如果您要按自然順序或自定義順序遍歷鍵,那麼treemap會更好。使用hashmap要求新增的鍵類明確定義了hashcode()和 equals()的實現。

兩個map中的元素一樣,但順序不一樣,導致hashcode()不一樣。

同樣做測試:

在hashmap中,同樣的值的map,順序不同,equals時,false;

而在treemap中,同樣的值的map,順序不同,equals時,true,說明,treemap在equals()時是整理了順序了的。

總結 Java集合之間的區別

1 集合中包含以下 collection介面 list介面 set介面 queue介面 arrays陣列 map介面 2 collection介面 2 1 有以下方法 名稱作用 size 返回集合中的項數 isempty 判斷集合是否為空 contains object contains objec...

java常見集合類區別

hashmap 執行緒不安全,key可以為null,不可多執行緒,效率高 hashtable 執行緒安全,key不可以為null,內部的方法基本都經過 synchronized 修飾,效率低下 concurrenthashmap 在hashtable的基礎上進行分割,鎖住分割的一部分而不是整個map...

java之List集合與Set集合的區別(1)

專案中我用到的list集合主要是arraylist以及hashset,他們全都是繼承自collection介面 list底層就是陣列 也就是說可以根據下標來拿到list中的元素 特點是元素有序放入,元素可以有重複,元素可以為null 可以使用for迴圈遍歷,也可以使用迭代器。hashset是基於雜湊...