Насколько я знаю, нет ни простого способа сделать ConcurrentHashMap
, ни эквивалентного класса, поддерживающего null
ключи или значения.
ConcurrentHashMap
очень отличается от Collections.synchronizedMap(new HashMap())
.
Прежде всего потому, что синхронизированная карта предотвратит одновременный доступ, даже если все обращения доступны только для чтения. ConcurrentHashMap
не будет блокировать одновременный доступ для чтения и, в некоторых случаях, может даже принимать одновременные записи.
Но более важным является то, что Iterator
, возвращаемые синхронизированной картой, склонны выбрасывать ConcurrentModificationException
, если базовая карта модифицируется при использовании итератора. С другой стороны, ConcurrentHashMap
итераторы гарантированно никогда не сгенерируют ConcurrentModificationException
, даже если базовая карта изменяется при использовании итератора.