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

最佳答案

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

HashLongObjMap将密钥存储为原始的longHashObjObjMap具有普通的Object密钥。

HashObjObjMap<Long, V>无法在内部调用HashLongObjMap,因为它们的合同略有不同,例如G。后者不能按住null键。同样,我也没有多大意义,如果您需要long键,则应该自己明确地使用HashLongObjMap而不是HashObjObjMap并依靠一些隐式的“优化”。

09-05 01:53