摘要:也就是說生成的容量是,生成的容量是。因為是的,當鏈表的長度達到個時,就會轉化為紅黑樹進行存儲,這樣搜索效率就會達到。在查找元素的時候,當計算好數組下標后,判斷如果該節點是普通節點,就遍歷查找如果是,就使用紅黑樹的方式查找。
Map散列表 HashMap與LinkedHashMap
這2個Map是我們最常見的map。LinkedHashMap內部使用了雙向鏈表來維護元素的順序,所以遍歷的時候取出來的元素順序和插入順序一致,而HashMap就不是。
可以看到LinkedHashMap繼承自HashMap,只不過它內部保存了一個雙向鏈表來維護順序。下圖中,指針head、tail就是鏈表的首尾節點!
網上關于hashmap分析地比較好的文章:hashmap1.7與1.8JDK1.8的HashMap
因為現在都用1.8了,所以還是以1.8的為準。
關于HashMap以及ConcurrentHashMap,網上的分析已經很透徹了。這里就提幾個點吧。
1.關于容量,HashMap的容量最小是16,每次擴容都是2的倍數,這是有原因的。也就是說:
new HashMap<>(14)生成的map容量是16,new HashMap<>(24)生成的map容量是32。
2.負載因子loadFactor是0.75,也就是4分之3。當放入map的元素達到capacity * loadFactor時,就要進行擴容操作。假設我們初始化的容量是16,那么放入第12個元素時,就會進行擴容操作,變成32容量。
3.散列表的結構,我們需要提及一下元素put的時候如何決定放入數組的哪個格子里?如下圖,索引值=(n-1) & hash,n是map的大小。當map大小為16時,那么n-1的二進制就是000...001111(前面都為0,末4位為1);那么與hash值相與,結果就=000...00xxxx,即后4位由hash值所決定,hash值原來的后4位是什么就是什么,這樣最后的結果就處于0~15之間了,正好對應大小為16的數組的索引范圍。
4.因為是1.8的HashMap,當鏈表的長度達到8個時,就會轉化為紅黑樹進行存儲,這樣搜索效率就會達到Olog~2~N。
5.在get查找元素的時候,當計算好數組下標后,判斷如果該節點是Node(普通節點),就遍歷查找;如果是TreeNode,就使用紅黑樹的方式查找。
HashTableHashTable又是一個遠古的類。HashTable與HashMap就如同Vector與ArrayList,這么一說你應該明白了。HashTable也是使用synchronized修飾了其操作方法,鎖的粒度極大,不推薦使用!
TreeMapTreeMap的想法是,在遍歷元素的時候,之前的HashMap取出的元素是無序的,LinkedHashMap取出的元素是按照插入順序的,那我還需要按照自己定義的元素順序來保存元素,這樣取出元素的時候就符合我的需求了。所以TreeMap會根據插入k-v的key進行排序保存順序。
講講Map對應的并發類Map對應的并發類有:java.util.concurrent.ConcurrentHashMap類和Collections.synchronizedMap(Map map)所修飾的類。
Map類圖可以看到,4個map都實現了Map接口,HashTable作為遠古類只實現了Map接口;而HashMap和TreeMap還繼承了AbstractMap抽象類;其次,LinkedHashMap還繼承自HashMap。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/77269.html
摘要:集合類類型解釋的父類集集合中的元素不按特定方式排序,并且沒有重復對象。他的有些實現類能對集合中的鍵對象進行排序。 集合類 2017-07-10 22:24:57 blog site https://github.com/Fiz1994 類型解釋: Collection : Set,List 的父類 Set(集):集合中的元素不按特定方式排序,并且沒有重復對象。他的有些實現類能對集合中的...
摘要:中的使用及在中的沖突方案引言簡稱是在作為的替代選擇新引入的,是包的重要成員。為了解決在頻繁沖突時性能降低的問題,中使用平衡樹來替代鏈表存儲沖突的元素。目前,只有和會在頻繁沖突的情況下使用平衡樹。 java中ConcurrentHashMap的使用及在Java 8中的沖突方案 1、引言 ConcurrentHashMap(簡稱CHM)是在Java 1.5作為Hashtable的替代選擇新...
摘要:增強的集合都可以是任何引用類型的數據,的不允許重復即同一個對象的任何兩個通過方法比較總是返回。的這些實現類和子接口中集的存儲形式和對應集合中元素的存儲形式完全相同。根據的自然順序,即枚舉值的定義順序,來維護對的順序。 Java8增強的Map集合 Key-value都可以是任何引用類型的數據,Map的Key不允許重復即同一個Map對象的任何兩個key通過equals方法比較總是返回...
摘要:如果鍵不存在,則執行壓棧操作之前創建的空列表。聲明當前類注教程的中文網官網附基礎知識整理之操作一基礎知識整理之操作二 Java操作Redis之操作數據 1.操作 String 1.1 源碼 public void stringOperator(){ //添加數據 jedis.set(name, Wayfreem);// 添加一個 key 為 n...
閱讀 3949·2021-11-22 13:53
閱讀 1676·2021-08-25 09:39
閱讀 2410·2019-08-29 18:36
閱讀 1469·2019-08-26 13:35
閱讀 1215·2019-08-26 11:57
閱讀 1678·2019-08-23 15:57
閱讀 803·2019-08-23 14:55
閱讀 1163·2019-08-23 14:51