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();
答案 0 :(得分:1)
HashObjObjMap
和java.util.HashMap
之间的区别在于算法和内存布局。 HashObjObjMap
是一个开放式寻址哈希表,带有线性探测,以相同的平面Object[]
数组存储键和值,散布顺序为:[key1,value1,key2,value2,...]。 Entry
个对象不存在,只有在Map
API(即entrySet()
迭代)需要时才会创建它们。 HashMap
是一个具有单独链接的哈希表,键和值存储在单独的Entry
对象中。
HashLongObjMap
将密钥存储为原始long
s,HashObjObjMap
具有普通Object
密钥。
HashObjObjMap<Long, V>
无法在内部调用HashLongObjMap
,因为他们的合同略有不同,例如: G。后者无法持有null
键。另外我没有太多意义,如果你需要long
个密钥,你应该自己明确地使用HashLongObjMap
而不是HashObjObjMap
并依赖一些隐含的“优化”。