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
相關文章
- HashTable HashMap HashSet區別(java)HashMapJava
- HashMap、LinkedHashMap、HashTable、HashSet筆記HashMap筆記
- HashMap、TreeMap、Hashtable、HashSet和ConcurrentHashMap區別HashMap
- HashMap底層實現原理/HashMap與HashTable區別/HashMap與HashSet區別HashMap
- HashMap和Hashtable的詳細區別HashMap
- HashSet和HashMapHashMap
- HashMap和HashSet深度解析HashMap
- 【java】【Map】HashMap、Hashtable、CollectionsJavaHashMap
- HashSet原始碼詳解原始碼
- HashSet與HashMap的區別HashMap
- ConcurrentHashMap HashMap HashTable區別HashMap
- HashMap 與HashTable的區別HashMap
- Hashmap 和Hashtable的區別HashMap
- HashMap和Hashtable的區別HashMap
- Hashtable和HashMap的區別HashMap
- 集合框架-HashMap&HashSet&LinkedHshMap框架HashMap
- Java集合(5)一 HashMap與HashSetJavaHashMap
- HashMap、HashTable、ConcurrentHashMap的區別HashMap
- HashMap詳解七HashMap
- 轉:Java中的HashSet, TreeSet, HashMap, TreeMapJavaHashMap
- Java HashMap 和 HashSet 的高效使用技巧JavaHashMap
- hashmap與Hashtable實現原理淺析HashMap
- 集合類HashMap,HashTable,ConcurrentHashMap區別?HashMap
- 集合框架-HashMap和Hashtable的區別框架HashMap
- 關於HashMap和Hashtable的區別HashMap
- HashTable和HashMap的六點區別HashMap
- HashMap原始碼詳解HashMap原始碼
- Java集合框架原始碼剖析:HashSet 和 HashMapJava框架原始碼HashMap
- Java 集合框架 HashSet 和 HashMap 原始碼剖析Java框架HashMap原始碼
- C#中Hashtable和HashMap的區別C#HashMap
- HashMap、Hashtable、ConcurrentHashMap的原理與區別HashMap
- Java中的HashMap和HashTable到底哪不同?JavaHashMap
- Java集合詳解4:一文讀懂HashMap和HashTable的區別以及常見面試題JavaHashMap面試題
- hashmap與hashtable的區別,以及實現hashmap的同步操作HashMap
- HashSet/HashMap、TreeSet/TreeMap、LinkedHashSet/LinkedHashMap 區別HashMap
- HashMap為何執行緒不安全?HashMap,HashTable,ConcurrentHashMap對比HashMap執行緒
- Java集合詳解(五):Hashtable原理解析Java
- java複習之HashMap和Hashtable的區別JavaHashMap