Koloboke HashObjObj<K, V>
有什么区别和 Java 实用程序 HashMap<K, V>
?
我知道 Koloboke 提供的性能,但在某些情况下 K/V 可能会变成整数/长整型。一般来说,如果知道HashLongObjMap
会推荐,但是当 K/V 作为泛型出现时会发生什么。据我了解,使用 HashLongObjMap
使用long
原始作为关键,但是当 HashObjObjMap<Long, V>
时出现什么差异?使用过吗?
例如:
HashLongObjMap<V> map1 = HashLongObjMaps.newImmutableMap();
对比
HashObjObjMap<K, V> map2 = HashObjObjMaps.newImmutableMap();
最佳答案
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
在内部,因为他们的契约(Contract)略有不同,例如。 G。后者不能容纳null
key 。另外,如果您需要的话,我认为它没有多大意义 long
您应该明确使用 HashLongObjMap
的键你自己而不是 HashObjObjMap
并依赖于一些隐式的“优化”。
关于Java HashObjObjMap<K, V> 与 HashMap<K, V>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35316243/