日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java自定义键值对_KV键值对数据类型

發(fā)布時(shí)間:2024/1/23 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java自定义键值对_KV键值对数据类型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

類關(guān)系圖

### ![](../assets/20180418143344001.png)常用接口及實(shí)現(xiàn)類

* Map

* Dictionary

* HashMap

* Hashtable

* LinkedHashMap

* SortedMap

* TreeMap

* WeakHashMap

* EnumMap

下面針對各個(gè)實(shí)現(xiàn)類的特點(diǎn)做一些說明:

\(1\) HashMap:它根據(jù)鍵的hashCode值存儲(chǔ)數(shù)據(jù),大多數(shù)情況下可以直接定位到它的值,因而具有很快的訪問速度,但遍歷順序卻是不確定的。 HashMap最多只允許一條記錄的鍵為null,允許多條記錄的值為null。HashMap非線程安全,即任一時(shí)刻可以有多個(gè)線程同時(shí)寫HashMap,可能會(huì)導(dǎo)致數(shù)據(jù)的不一致。如果需要滿足線程安全,可以用 Collections的synchronizedMap方法使HashMap具有線程安全的能力,或者使用ConcurrentHashMap。

\(2\) Hashtable:Hashtable是遺留類,很多映射的常用功能與HashMap類似,不同的是它承自Dictionary類,并且是線程安全的,任一時(shí)間只有一個(gè)線程能寫Hashtable,并發(fā)性不如ConcurrentHashMap,因?yàn)镃oncurrentHashMap引入了分段鎖。Hashtable不建議在新代碼中使用,不需要線程安全的場合可以用HashMap替換,需要線程安全的場合可以用ConcurrentHashMap替換。

\(3\) LinkedHashMap:LinkedHashMap是HashMap的一個(gè)子類,保存了記錄的插入順序,在用Iterator遍歷LinkedHashMap時(shí),先得到的記錄肯定是先插入的,也可以在構(gòu)造時(shí)帶參數(shù),按照訪問次序排序。

\(4\) TreeMap:TreeMap實(shí)現(xiàn)SortedMap接口,能夠把它保存的記錄根據(jù)鍵排序,默認(rèn)是按鍵值的升序排序,也可以指定排序的比較器,當(dāng)用Iterator遍歷TreeMap時(shí),得到的記錄是排過序的。如果使用排序的映射,建議使用TreeMap。在使用TreeMap時(shí),key必須實(shí)現(xiàn)Comparable接口或者在構(gòu)造TreeMap傳入自定義的Comparator,否則會(huì)在運(yùn)行時(shí)拋出java.lang.ClassCastException類型的異常。

對于上述四種Map類型的類,要求映射中的key是不可變對象。不可變對象是該對象在創(chuàng)建后它的哈希值不會(huì)被改變。如果對象的哈希值發(fā)生變化,Map對象很可能就定位不到映射的位置了。

通過上面的比較,我們知道了HashMap是Java的Map家族中一個(gè)普通成員,鑒于它可以滿足大多數(shù)場景的使用條件,所以是使用頻度最高的一個(gè)。下文我們主要結(jié)合源碼,從存儲(chǔ)結(jié)構(gòu)、常用方法分析、擴(kuò)容以及安全性等方面深入講解HashMap的工作原理。

### Map集合類對null的支持

|集合類 | key | value | super | 說明 |

| :---: | :---: |:---: |:---: | ---: |

| Hashtable | 不允許null |不允許null | Dictionary | 線程安全|

| ConcurrentHashMap | 不允許null | 不允許null| AbstractMap|鎖分段技術(shù)(JDK8:CAS) |

| TreeMap | 不允許null | 允許null | AbstractMap | 線程不安全|

| HashMap | 運(yùn)行為null |運(yùn)行為null| AbstractMap| 線程不安全|

【參考資料】

【美團(tuán)公眾號(hào)】 -- [https://tech.meituan.com/java-hashmap.html](https://tech.meituan.com/java-hashmap.html)

總結(jié)

以上是生活随笔為你收集整理的java自定义键值对_KV键值对数据类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。