Если ключи Я хочу использовать гарантированно быть уникальным (или, по крайней мере, можно сделать предположение о том, что ключи уникальны), не используя «ваниль» ConcurrentHashMap обеспечивают лучшую производительность,
Обычно вы используете ConcurrentHashMap
, если Map
является потенциальным узким местом параллелизма. Если ваше приложение однопоточно или нет конкурентов, ConcurrentHashMap
работает медленнее, чем HashMap
.
или нужна ли функция хэширования или метод ввода, чтобы избежать ненужного хеширования?
Функция хэша оценивается один раз на «зонд» хэш-таблицы; например один раз за get
или put
работа. Вы можете уменьшить стоимость хеш-функции путем кэширования результата, но это потребует дополнительных 4 байтов хранения на один ключевой объект. Если кэширование является целесообразным оптимизация зависит от:
- , что относительная стоимость хеширования по сравнению с остальной частью приложения, и
- доля звонков
hashCode()
, которые будут реально использовать сохраненную в кэше значения.
Оба эти фактора очень специфичны для применения.
(Кстати, в долгосрочной перспективе стоимость использования хэш-код идентичности в качестве значения хэш-функции является также дополнительно 4 байт памяти.)
Кроме того, делает цифровую клавишу есть какие-либо выигрыш в производительности в течение нечисловой ключ (например, String или POJO с надлежащей функцией хэширования)?
Хеш-функция, скорее всего, будет дешевле в числовом корпусе, но стоит ли этого, зависит от того, существуют ли конкретные приложения для использования цифровой клавиши. И, как и выше, относительные затраты - это особенности приложения. Например, стоимость String.hashCode()
пропорциональна длине хешируемой строки.
Если вы не нуждаетесь в поточно-аспект, не используйте ConcurrentHashMap, использовать HashMap –