Какую реализацию Map мне следует использовать, если моей карте требуется быть маленьким, а не быстрым?

Я обычно использую HashMap в своих программах, так как знаю, что он обычно наиболее эффективен (при правильном использовании) и может справиться с большими картами. с легкостью. Я знаю о EnumMap , которая очень полезна для ключей перечисления, но часто я создаю небольшую карту, которая никогда не станет очень большой, скорее всего, вскоре будет отброшена и не будет проблем с параллелизмом.

Является ли HashMap слишком сложным для такого небольшого, локального и временного использования? Есть ли другая простая реализация, которую я могу использовать в этих случаях?

Думаю, я ищу реализацию Map , которая аналогична ArrayList для List .Он существует?


Добавлено позже после ответов:

Вот сценарий, в котором медленная, но очень простая реализация могла бы быть лучше - когда у меня много, много таких Map с. Предположим, например, что у меня есть миллион или около того этих крошечных карт, на каждой из которых есть несколько (часто меньше трех) записей. У меня низкая процентная ставка - возможно, я на самом деле не ссылаюсь на них, пока они не отбрасываются большую часть времени. По-прежнему ли HashMap для них лучший выбор?

Использование ресурсов - это больше, чем просто скорость - я бы хотел что-то, что не фрагментирует кучу слишком сильно и не заставляет сборщики мусора занимать долгое время, например.

Может оказаться, что HashMap - правильный ответ, но это не случай преждевременной оптимизации (или, по крайней мере, не может быть).


После некоторых размышлений добавлено много позже:

Я решил вручную написать свою собственную SmallMap . Его легко сделать с помощью AbstractMap . Я также добавил пару конструкторов, чтобы SmallMap можно было построить из существующей Map .

Попутно мне пришлось решить, как представить Entry s и реализовать SmallSet для метода entrySet .

Я многому научился, кодируя (и модулируя это), и хочу поделиться этим, если кто-то еще захочет. Он находится на гитхабе здесь .

29
задан River 18 October 2017 в 03:33
поделиться