[英]Java HashObjObjMap<K, V> vs HashMap<K, V>
Koloboke HashObjObj<K, V>
和Java util HashMap<K, V>
什么區別?
我知道Koloboke所提供的性能,但可能會發現K / V確實是Integer / Long。 通常,如果推薦使用已知的HashLongObjMap
,但是當K / V作為泛型進入時會發生什么。 據我了解,使用HashLongObjMap
使用long
原語作為鍵,但是使用HashObjObjMap<Long, V>
有什么區別?
例如:
HashLongObjMap<V> map1 = HashLongObjMaps.newImmutableMap();
VS
HashObjObjMap<K, V> map2 = HashObjObjMaps.newImmutableMap();
HashObjObjMap
和java.util.HashMap
之間的區別是算法和行程內存布局。 HashObjObjMap
是一個帶有線性探測的開放式哈希表,將鍵和值以散列的順序存儲在同一平面Object[]
數組中:[key1,value1,key2,value2,...]。 Entry
對象不存在,僅在Map
API需要時(即entrySet()
迭代)創建它們。 HashMap
是具有單獨鏈接的哈希表,鍵和值存儲在單獨的Entry
對象中。
HashLongObjMap
將鍵存儲為原始long
,而HashObjObjMap
具有普通的Object
鍵。
HashObjObjMap<Long, V>
無法HashLongObjMap
內部調用HashLongObjMap
因為它們的合同略有不同,例如后者不能持有null
鍵。 同樣,我也沒有多大意義,如果您需要long
鍵,則應該自己顯式使用HashLongObjMap
而不是HashObjObjMap
並依靠一些隱式的“優化”。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.