国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Java中的Map

wind5o / 3609人閱讀

摘要:也就是說(shuō)生成的容量是,生成的容量是。因?yàn)槭堑模?dāng)鏈表的長(zhǎng)度達(dá)到個(gè)時(shí),就會(huì)轉(zhuǎn)化為紅黑樹(shù)進(jìn)行存儲(chǔ),這樣搜索效率就會(huì)達(dá)到。在查找元素的時(shí)候,當(dāng)計(jì)算好數(shù)組下標(biāo)后,判斷如果該節(jié)點(diǎn)是普通節(jié)點(diǎn),就遍歷查找如果是,就使用紅黑樹(shù)的方式查找。

Map散列表 HashMap與LinkedHashMap

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

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

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

因?yàn)楝F(xiàn)在都用1.8了,所以還是以1.8的為準(zhǔn)。

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

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

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

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

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

4.因?yàn)槭?.8的HashMap,當(dāng)鏈表的長(zhǎng)度達(dá)到8個(gè)時(shí),就會(huì)轉(zhuǎn)化為紅黑樹(shù)進(jìn)行存儲(chǔ),這樣搜索效率就會(huì)達(dá)到Olog~2~N。

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

HashTable

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

TreeMap

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

講講Map對(duì)應(yīng)的并發(fā)類(lèi)

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

Map類(lèi)圖

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

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

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

相關(guān)文章

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

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

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

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

    kun_jian 評(píng)論0 收藏0
  • java集合-Map

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

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

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

    fanux 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<