Очевидное различие между Data.Map
и Data.HashMap
заключается в том, что для первых нужны ключи Ord
, для последних - Hashable
.Большинство общих ключей оба, так что это не решающий критерий.У меня нет опыта работы с Data.HashTable
, поэтому я не могу комментировать это.
API-интерфейсы Data.HashMap
и Data.Map
очень похожи, но Data.Map
экспортирует больше функций, некоторые, например,alter
отсутствует в Data.HashMap
, другие предоставляются в строгом и нестрогом вариантах, в то время как Data.HashMap
(я полагаю, вы имели в виду хэш-карту из unordered-container ) предоставляет ленивые и строгие API в отдельныхмодули.Если вы используете только общую часть API, переключение действительно безболезненно.
Что касается производительности, Data.HashMap
из неупорядоченных контейнеров имеет довольно быстрый поиск, как я измерил последний раз, это былоявно быстрее, чем Data.IntMap
или Data.Map
, что особенно верно для (еще не выпущенной) ветви HAMT unordered-container .Я думаю, что для вставок, это было более или менее на уровне Data.IntMap
и несколько быстрее, чем Data.Map
, но я немного размышляю об этом.
Оба достаточно производительны для большинства задач, для тех,задач там, где их нет, вам, вероятно, понадобится индивидуальное решение в любом случае.Учитывая, что вы спрашиваете конкретно о поисках, я бы дал Data.HashMap
преимущество.