Я обычно использую HashMap
в своих программах, так как знаю, что он обычно наиболее эффективен (при правильном использовании) и может справиться с большими картами. с легкостью. Я знаю о EnumMap
, которая очень полезна для ключей перечисления, но часто я создаю небольшую карту, которая никогда не станет очень большой, скорее всего, вскоре будет отброшена и не будет проблем с параллелизмом.
Является ли HashMap
слишком сложным для такого небольшого, локального и временного использования? Есть ли другая простая реализация, которую я могу использовать в этих случаях?
Думаю, я ищу реализацию Map
, которая аналогична ArrayList
для List
.Он существует?
Добавлено позже после ответов:
Вот сценарий, в котором медленная, но очень простая реализация могла бы быть лучше - когда у меня много, много таких Map
с. Предположим, например, что у меня есть миллион или около того этих крошечных карт, на каждой из которых есть несколько (часто меньше трех) записей. У меня низкая процентная ставка - возможно, я на самом деле не ссылаюсь на них, пока они не отбрасываются большую часть времени. По-прежнему ли HashMap
для них лучший выбор?
Использование ресурсов - это больше, чем просто скорость - я бы хотел что-то, что не фрагментирует кучу слишком сильно и не заставляет сборщики мусора занимать долгое время, например.
Может оказаться, что HashMap
- правильный ответ, но это не случай преждевременной оптимизации (или, по крайней мере, не может быть).
После некоторых размышлений добавлено много позже:
Я решил вручную написать свою собственную SmallMap
. Его легко сделать с помощью AbstractMap
. Я также добавил пару конструкторов, чтобы SmallMap
можно было построить из существующей Map
.
Попутно мне пришлось решить, как представить Entry
s и реализовать SmallSet
для метода entrySet
.
Я многому научился, кодируя (и модулируя это), и хочу поделиться этим, если кто-то еще захочет. Он находится на гитхабе здесь .