Есть несколько соображений:
Память
Поскольку каждый объект, используемый в качестве ключей, будет ссылаться на карту, каждый объект не может быть собран мусором, если сам Map
не может быть собран мусором или ключ был удален из Map
. То же самое можно сказать и о связанном значении для каждого ключа.
Что касается хранилища, используемого картой для хранения ключей и значений, то вообще не должно быть никакой разницы, если вы используете, например, String
как ключ или пользовательский объект, поскольку оба вида ключей будут просто сохранены как ссылки.
Производительность
Производительность операций на Map
очень сильно зависит от производительности Оператор ==
и свойство hashCode
, так как оба используются для нескольких операций, используемых в Map
.
Я могу порекомендовать прочитать о них здесь:
https://api.dart.dev/stable/2.7.2/dart-core/Object/operator_equals.html
https://api.dart.dev/stable/2.7.2/dart-core/Object/hashCode.html
Заключение
Многие проекты используют пользовательские объекты в качестве ключей для Карт, и обычно проблем не возникает во время этого. На самом деле использование пользовательского объекта ничем не отличается от использования, например, String
в качестве ключа, поскольку String
также являются обычным классом с собственным оператором ==
и свойством hashCode
.