Java HashObjObjMap<K, V> 与 HashMap<K, V>

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();

HashObjObjMapjava.util.HashMap的区别在于算法和内存布局。 HashObjObjMap 是一个开放寻址散列 table,具有线性探测功能,将键和值存储在同一个平面 Object[] 数组中,顺序为:[key1, value1, key2, value2, .. .]。 Entry 对象不存在,它们仅在 Map API 需要时创建(即 entrySet() 迭代)。 HashMap 是一个散列 table,具有单独的链接,键和值存储在单独的 Entry 对象中。

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

HashObjObjMap<Long, V> 无法在内部调用 HashLongObjMap,因为它们的合同略有不同,e。 G。后者不能持有 null 键。此外,我认为它没有多大意义,如果你需要 long 键,你应该自己显式使用 HashLongObjMap 而不是 HashObjObjMap 并依赖一些隐式的 "optimizations".