collection
1. list
arraylist: object陣列
vector: object陣列
linkedlist: 雙向鍊錶(jdk1.6之前為迴圈鍊錶,jdk1.7取消了迴圈)
2. set
hashset(無序,唯一): 基於 hashmap 實現的,底層採用 hashmap 來儲存元素
linkedhashset: linkedhashset 繼承於 hashset,並且其內部是通過 linkedhashmap 來實現的。有點類似於我們之前說的linkedhashmap 其內部是基於 hashmap 實現一樣,不過還是有一點點區別的
treeset(有序,唯一): 紅黑樹(自平衡的排序二叉樹)
map
hashmap: jdk1.8之前hashmap由陣列 鍊錶組成的,陣列是hashmap的主體,鍊錶則是主要為了解決雜湊衝突而存在的(「拉鍊法」解決衝突)。jdk1.8以後在解決雜湊衝突時有了較大的變化,當鍊表長度大於閾值(預設為8)時,將鍊錶轉化為紅黑樹,以減少搜尋時間
linkedhashmap: linkedhashmap 繼承自 hashmap,所以它的底層仍然是基於拉鍊式雜湊結構即由陣列和鍊錶或紅黑樹組成。另外,linkedhashmap 在上面結構的基礎上,增加了一條雙向鍊錶,使得上面的結構可以保持鍵值對的插入順序。同時通過對鍊錶進行相應的操作,實現了訪問順序相關邏輯。詳細可以檢視:《linkedhashmap 原始碼詳細分析(jdk1.8)》
hashtable: 陣列 鍊錶組成的,陣列是 hashmap 的主體,鍊錶則是主要為了解決雜湊衝突而存在的
treemap: 紅黑樹(自平衡的排序二叉樹)
如何選用集合?
主要根據集合的特點來選用,比如我們需要根據鍵值獲取到元素值時就選用map介面下的集合,需要排序時選擇treemap,不需要排序時就選擇hashmap,需要保證執行緒安全就選用concurrenthashmap.當我們只需要存放元素值時,就選擇實現collection介面的集合,需要保證元素唯一時選擇實現set介面的集合比如treeset或hashset,不需要就選擇實現list介面的比如arraylist或linkedlist,然後再根據實現這些介面的集合的特點來選用。
Redis底層資料結構 整數集合
redis 中的整數集合 intset 是用來儲存多個不重複的整數值且有序的集合抽象資料結構,可以儲存型別為 int16 t int32 t 或者 int64 t 的整數值。整數集合在 redis 中作為了集合 set 資料結構的底層實現之一。當乙個集合中的元素都是整數值,且元素不多的時候,整數集合...
Redis底層資料結構 五 整數集合
整數集合是集合鍵的底層實現之一。整數集合 intset 是redis用於儲存整數值的集合抽象資料結構,可以儲存型別為int16 t,int32 t或者int64 t的整數值,並且保證集合中不會出現重複元素。contents陣列是整數集合的底層實現 證書集合的每個元素都是contents陣列乙個陣列項...
STL底層資料結構實現總結
1.vector 底層資料結構為陣列 支援快速隨機訪問 2.list 底層資料結構為雙向鍊錶,支援快速增刪 3.deque 底層資料結構為乙個 控制器和多個緩衝區,詳細見stl原始碼剖析p146,支援首尾 中間不能 快 速增刪,也支援隨機訪問 deque是乙個雙端佇列 double ended qu...