Как Dart Set <E>сравнивает предметы? - PullRequest
0 голосов
/ 13 июля 2020

Я просто засунул кучу MyClass в Set в Dart. MyClass не реализует Comparable и не имеет определенного оператора ==. Он скомпилирован нормально.

Чтобы этот Set правильно обнаруживал дубликаты, должен ли я реализовать интерфейс Comparable или просто переопределить оператор ==?

1 Ответ

5 голосов
/ 13 июля 2020

Все классы Dart происходят от Object, что дает operator == и hashCode. Реализации по умолчанию Object проверяют объект identity ; экземпляр вашего класса будет сравнивать равное только самому себе.

Если вы хотите, чтобы два разных экземпляра могли сравнивать равные значения, вам необходимо:

  • Реализовать operator == и hashCode в вашем пользовательском классе. Реализация Set по умолчанию - LinkedHashSet, в которой Comparable не используется. (Однако существует реализация SplayTreeSet , которая использует Comparable, но поиск и вставки будут O (log n) вместо O (1).)
  • В качестве альтернативы используйте LinkedHashSet конструктор или HashSet конструктор и передать соответствующие обратные вызовы для вычисления равенства и sh вычислений кода.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...