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 хранит ключи как примитивные longs, HashObjObjMap имеет обычный Object ключи.

HashObjObjMap<Long, V> не могу позвонить HashLongObjMap внутренне, потому что у них немного другой контракт, например, последний не может держать null ключ. Также я не вижу большого смысла в этом, если вам нужно long ключи, которые вы должны просто явно использовать HashLongObjMap себя вместо HashObjObjMap и полагаться на некоторые неявные "оптимизации".

Другие вопросы по тегам