Dart Set<E> 如何比较项目?

Sco*_*ttF 0 comparison set dart flutter

我只是在 Dart 中塞了一堆MyClass东西SetMyClass没有实现Comparable,也没有==定义运算符。它编译得很好。

为了Set正确检测重复项,我是否必须实现Comparable接口,或者只是覆盖==运算符?

jam*_*lin 5

所有 Dart 类都源自Object,它确实提供了operator ==hashCodeObject的默认实现检查对象身份;你的类的一个实例只会与它自己比较。

如果您希望两个不同的实例能够比较相等,那么您需要:

  • 在您的自定义类中实现operator ==hashCodeSet的默认实现是 a LinkedHashSet,它不使用Comparable. (有一个SplayTreeSet实现Comparable但是,确实使用了,但是查找和插入将是 O(log n) 而不是 O(1)。)
  • 或者使用LinkedHashSet构造函数HashSet构造函数并传递适当的回调以进行相等和哈希码计算。