成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Java中的Map

wind5o / 3663人閱讀

摘要:也就是說生成的容量是,生成的容量是。因為是的,當鏈表的長度達到個時,就會轉(zhuǎn)化為紅黑樹進行存儲,這樣搜索效率就會達到。在查找元素的時候,當計算好數(shù)組下標后,判斷如果該節(jié)點是普通節(jié)點,就遍歷查找如果是,就使用紅黑樹的方式查找。

Map散列表 HashMap與LinkedHashMap

這2個Map是我們最常見的map。LinkedHashMap內(nèi)部使用了雙向鏈表來維護元素的順序,所以遍歷的時候取出來的元素順序和插入順序一致,而HashMap就不是。

可以看到LinkedHashMap繼承自HashMap,只不過它內(nèi)部保存了一個雙向鏈表來維護順序。下圖中,指針head、tail就是鏈表的首尾節(jié)點!

網(wǎng)上關(guān)于hashmap分析地比較好的文章:hashmap1.7與1.8
JDK1.8的HashMap

因為現(xiàn)在都用1.8了,所以還是以1.8的為準。

關(guān)于HashMap以及ConcurrentHashMap,網(wǎng)上的分析已經(jīng)很透徹了。這里就提幾個點吧。

1.關(guān)于容量,HashMap的容量最小是16,每次擴容都是2的倍數(shù),這是有原因的。也就是說:

new HashMap<>(14)生成的map容量是16,new HashMap<>(24)生成的map容量是32。

2.負載因子loadFactor是0.75,也就是4分之3。當放入map的元素達到capacity * loadFactor時,就要進行擴容操作。假設(shè)我們初始化的容量是16,那么放入第12個元素時,就會進行擴容操作,變成32容量。

3.散列表的結(jié)構(gòu),我們需要提及一下元素put的時候如何決定放入數(shù)組的哪個格子里?如下圖,索引值=(n-1) & hash,n是map的大小。當map大小為16時,那么n-1的二進制就是000...001111(前面都為0,末4位為1);那么與hash值相與,結(jié)果就=000...00xxxx,即后4位由hash值所決定,hash值原來的后4位是什么就是什么,這樣最后的結(jié)果就處于0~15之間了,正好對應(yīng)大小為16的數(shù)組的索引范圍。

4.因為是1.8的HashMap,當鏈表的長度達到8個時,就會轉(zhuǎn)化為紅黑樹進行存儲,這樣搜索效率就會達到Olog~2~N。

5.在get查找元素的時候,當計算好數(shù)組下標后,判斷如果該節(jié)點是Node(普通節(jié)點),就遍歷查找;如果是TreeNode,就使用紅黑樹的方式查找。

HashTable

HashTable又是一個遠古的類。HashTable與HashMap就如同Vector與ArrayList,這么一說你應(yīng)該明白了。HashTable也是使用synchronized修飾了其操作方法,鎖的粒度極大,不推薦使用!

TreeMap

TreeMap的想法是,在遍歷元素的時候,之前的HashMap取出的元素是無序的,LinkedHashMap取出的元素是按照插入順序的,那我還需要按照自己定義的元素順序來保存元素,這樣取出元素的時候就符合我的需求了。所以TreeMap會根據(jù)插入k-v的key進行排序保存順序。

講講Map對應(yīng)的并發(fā)類

Map對應(yīng)的并發(fā)類有:java.util.concurrent.ConcurrentHashMap類和Collections.synchronizedMap(Map map)所修飾的類。

Map類圖

可以看到,4個map都實現(xiàn)了Map接口,HashTable作為遠古類只實現(xiàn)了Map接口;而HashMap和TreeMap還繼承了AbstractMap抽象類;其次,LinkedHashMap還繼承自HashMap。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/77269.html

相關(guān)文章

  • java-list-map-set 學(xué)習(xí)記錄

    摘要:集合類類型解釋的父類集集合中的元素不按特定方式排序,并且沒有重復(fù)對象。他的有些實現(xiàn)類能對集合中的鍵對象進行排序。 集合類 2017-07-10 22:24:57 blog site https://github.com/Fiz1994 類型解釋: Collection : Set,List 的父類 Set(集):集合中的元素不按特定方式排序,并且沒有重復(fù)對象。他的有些實現(xiàn)類能對集合中的...

    stackvoid 評論0 收藏0
  • java中ConcurrentHashMap的使用及在Java 8中的沖突方案

    摘要:中的使用及在中的沖突方案引言簡稱是在作為的替代選擇新引入的,是包的重要成員。為了解決在頻繁沖突時性能降低的問題,中使用平衡樹來替代鏈表存儲沖突的元素。目前,只有和會在頻繁沖突的情況下使用平衡樹。 java中ConcurrentHashMap的使用及在Java 8中的沖突方案 1、引言 ConcurrentHashMap(簡稱CHM)是在Java 1.5作為Hashtable的替代選擇新...

    kun_jian 評論0 收藏0
  • java集合-Map

    摘要:增強的集合都可以是任何引用類型的數(shù)據(jù),的不允許重復(fù)即同一個對象的任何兩個通過方法比較總是返回。的這些實現(xiàn)類和子接口中集的存儲形式和對應(yīng)集合中元素的存儲形式完全相同。根據(jù)的自然順序,即枚舉值的定義順序,來維護對的順序。 Java8增強的Map集合 Key-value都可以是任何引用類型的數(shù)據(jù),Map的Key不允許重復(fù)即同一個Map對象的任何兩個key通過equals方法比較總是返回...

    Little_XM 評論0 收藏0
  • Java基礎(chǔ)知識整理之操作Redis(三)

    摘要:如果鍵不存在,則執(zhí)行壓棧操作之前創(chuàng)建的空列表。聲明當前類注教程的中文網(wǎng)官網(wǎng)附基礎(chǔ)知識整理之操作一基礎(chǔ)知識整理之操作二 Java操作Redis之操作數(shù)據(jù) 1.操作 String 1.1 源碼 public void stringOperator(){ //添加數(shù)據(jù) jedis.set(name, Wayfreem);// 添加一個 key 為 n...

    fanux 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<