Java HashObjObjMap <k,v =“”> vs HashMap <k,v =“”>

时间:2016-02-10 13:11:38

标签: java hashmap koloboke

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

1 个答案:

答案 0 :(得分:1)

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

HashLongObjMap将密钥存储为原始long s,HashObjObjMap具有普通Object密钥。

HashObjObjMap<Long, V>无法在内部调用HashLongObjMap,因为他们的合同略有不同,例如: G。后者无法持有null键。另外我没有太多意义,如果你需要long个密钥,你应该自己明确地使用HashLongObjMap而不是HashObjObjMap并依赖一些隐含的“优化”。