Java HashObjObjMap<K, V> против HashMap<K, V>
В чем разница между колобками HashObjObj<K, V>
и Java утилита 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 ответ
Разница между HashObjObjMap
а также java.util.HashMap
алгоритм и внутренняя схема памяти. HashObjObjMap
хеш-таблица с открытой адресацией с линейным зондированием, хранящая ключи и значения в одной и той же квартире Object[]
массив, в чередующемся порядке: [ключ1, значение1, ключ2, значение2, ...]. Entry
объекты не существуют, они создаются только тогда, когда этого требует Map
API (т.е. entrySet()
итерация). HashMap
хеш-таблица с отдельной цепочкой, ключи и значения хранятся в отдельной Entry
объекты.
HashLongObjMap
хранит ключи как примитивные long
s, HashObjObjMap
имеет обычный Object
ключи.
HashObjObjMap<Long, V>
не могу позвонить HashLongObjMap
внутренне, потому что у них немного другой контракт, например, последний не может держать null
ключ. Также я не вижу большого смысла в этом, если вам нужно long
ключи, которые вы должны просто явно использовать HashLongObjMap
себя вместо HashObjObjMap
и полагаться на некоторые неявные "оптимизации".