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();
HashObjObjMap
和java.util.HashMap
的区别在于算法和内存布局。 HashObjObjMap
是一个开放寻址散列 table,具有线性探测功能,将键和值存储在同一个平面 Object[]
数组中,顺序为:[key1, value1, key2, value2, .. .]。 Entry
对象不存在,它们仅在 Map
API 需要时创建(即 entrySet()
迭代)。 HashMap
是一个散列 table,具有单独的链接,键和值存储在单独的 Entry
对象中。
HashLongObjMap
将键存储为原始 long
s,HashObjObjMap
具有普通的 Object
键。
HashObjObjMap<Long, V>
无法在内部调用 HashLongObjMap
,因为它们的合同略有不同,e。 G。后者不能持有 null
键。此外,我认为它没有多大意义,如果你需要 long
键,你应该自己显式使用 HashLongObjMap
而不是 HashObjObjMap
并依赖一些隐式的 "optimizations".
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();
HashObjObjMap
和java.util.HashMap
的区别在于算法和内存布局。 HashObjObjMap
是一个开放寻址散列 table,具有线性探测功能,将键和值存储在同一个平面 Object[]
数组中,顺序为:[key1, value1, key2, value2, .. .]。 Entry
对象不存在,它们仅在 Map
API 需要时创建(即 entrySet()
迭代)。 HashMap
是一个散列 table,具有单独的链接,键和值存储在单独的 Entry
对象中。
HashLongObjMap
将键存储为原始 long
s,HashObjObjMap
具有普通的 Object
键。
HashObjObjMap<Long, V>
无法在内部调用 HashLongObjMap
,因为它们的合同略有不同,e。 G。后者不能持有 null
键。此外,我认为它没有多大意义,如果你需要 long
键,你应该自己显式使用 HashLongObjMap
而不是 HashObjObjMap
并依赖一些隐式的 "optimizations".