1

HashObjObj<K, V>Koloboke和 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();

4

1 回答 1

1

HashObjObjMap和之间的区别在于java.util.HashMap算法和内部内存布局。HashObjObjMap是一个具有线性探测的开放寻址哈希表,将键和值存储在同一个平面Object[]数组中,以穿插顺序:[key1, value1, key2, value2, ...]。Entry对象不存在,它们仅在MapAPI 需要时创建(即entrySet()迭代)。HashMap是具有单独链接的哈希表,键和值存储在单独的Entry对象中。

HashLongObjMap将键存储为原始longs,HashObjObjMap具有普通Object键。

HashObjObjMap<Long, V>不能在HashLongObjMap内部调用,因为它们的合约略有不同,例如后者不能持有null密钥。此外,我认为它没有多大意义,如果您需要long密钥,您应该明确地使用HashLongObjMap自己而不是HashObjObjMap依赖一些隐式的“优化”。

于 2016-02-11T08:45:23.850 回答