HashMap、HashTable、HashSet詳解
所謂hash,實際上就是雜湊,音譯為雜湊,就是通過雜湊演算法,將輸入轉換為固定長度的輸出,詳情點選傳送門。
HashMap
1.建立hashMap時,可以指定建立長度和負載因子的map(其中負載因子,指的是已經使用儲存空間與實際儲存空間的比值,比值越大,節省空間,但是搜尋速度會變慢,過小,浪費空間,但是搜尋速度快,預設值 為0.75)
2.檢視hashMap的put方法的原始碼實現
下圖為確定hashCode在陣列table中的索引位置,非常巧妙,當length總為2的次方時,假設 h=5,length=16, 那麼 h & length - 1 將得到 5;如果 h=6,length=16, 那麼 h & length - 1 將得到 6 ... 從而確定在陣列中的位置
該原始碼體現了,hashMap中是允許存在空的鍵值,迴圈中,解決了當存在相同hashCode出現hash碰撞時的解決方法,並對存在鍵的舊值替換為新值,所以hashMap中不能存在重複鍵
小結:a.hashMap中是允許存在空的鍵值
b.hash碰撞時,通過實體鏈儲存進行解決
c.hashMap中不能存在重複鍵
3.hashMap中對空鍵的處理putForNullKey方法
4.hashMap中的get方法
下圖為get方法中呼叫的getEntry方法
5.hashMap對於resize表陣列的處理
resize時必須進行位置的重新計算,不然不能找到準確的資料
與hashTable的區別
A.hashTable中預設為synchronized,同步的,執行緒安全
B.由上可得出,hashMap可以存在空的鍵值,(判斷hashMap中是否存在一個鍵只能使用containsKey,不能使用get),hashTable不允許存在空的鍵值
對於hashSet
hashSet底層的實現就是採用的hashMap,只是進行了一次封裝,將資料存到key中,value存入的是PRESENT,就是一個Object
參考自:http://blog.csdn.net/bear_wr/article/details/52275874
相關文章
- HashMap、LinkedHashMap、HashTable、HashSet筆記HashMap筆記
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- Hashtable和HashMapHashMap
- HashSet和HashMapHashMap
- 【java】【Map】HashMap、Hashtable、CollectionsJavaHashMap
- HashMap、HashTable、ConcurrentHashMap的區別HashMap
- HashSet與HashMap的區別HashMap
- 集合框架-HashMap&HashSet&LinkedHshMap框架HashMap
- 集合類HashMap,HashTable,ConcurrentHashMap區別?HashMap
- HashMap詳解七HashMap
- HashMap、Hashtable、ConcurrentHashMap的原理與區別HashMap
- Java HashMap 和 HashSet 的高效使用技巧JavaHashMap
- HashSet/HashMap、TreeSet/TreeMap、LinkedHashSet/LinkedHashMap 區別HashMap
- HashMap原始碼詳解HashMap原始碼
- C#中Hashtable和HashMap的區別C#HashMap
- HashMap為何執行緒不安全?HashMap,HashTable,ConcurrentHashMap對比HashMap執行緒
- Java集合詳解(五):Hashtable原理解析Java
- Java集合詳解4:一文讀懂HashMap和HashTable的區別以及常見面試題JavaHashMap面試題
- Hashtable/HashMap與key/value為null的關係HashMapNull
- java複習之HashMap和Hashtable的區別JavaHashMap
- HashTable、ConcurrentHashMap、TreeMap、HashMap關於鍵值的區別HashMap
- 詳解HashMap原始碼解析(下)HashMap原始碼
- 詳解HashMap原始碼解析(上)HashMap原始碼
- 詳解 PHP 陣列的底層實現:HashTablePHP陣列
- 你真的瞭解HashSet 和HashMap的區別、優缺點、使用場景嗎?HashMap
- HashMap原理詳解,包括底層原理HashMap
- 五分鐘看懂Hashtable原始碼以及與HashMap的區別原始碼HashMap
- 為什麼hashtable不允許設定Null但是hashmap允許?NullHashMap
- Java集合詳解(三):HashMap原理解析JavaHashMap
- 一文讀懂JDK7,8,9的hashmap,hashtable,concJDKHashMap
- HashSet與HashMap比較——新增物件已存在處理方式一樣?HashMap物件
- Java集合系列(四):HashMap、Hashtable、LinkedHashMap、TreeMap的使用方法及區別JavaHashMap
- HashMap自動擴容機制原始碼詳解HashMap原始碼
- 10分鐘掌握ConcurrentHashMap 3分鐘清楚和HashMap、Hashtable的區別HashMap
- HashMap圖解HashMap圖解
- HashSet
- HashMap稍微詳細的理解HashMap
- Java集合詳解7:一文搞清楚HashSet,TreeSet與LinkedHashSet的異同Java
- 一萬三千字的HashMap面試必問知識點詳解HashMap面試