Koloboke HashObjObj<K, V>
和Java util HashMap<K, V>
有什么区别?
我知道Koloboke所提供的性能,但可能会出现K / V变成整数/长整数的情况。通常,如果建议使用已知的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
,因为它们的合同略有不同,例如G。后者不能按住null
键。同样,我也没有多大意义,如果您需要long
键,则应该自己明确地使用HashLongObjMap
而不是HashObjObjMap
并依靠一些隐式的“优化”。