HashSet<E> 构造函数

HashSet<E>(
  1. {bool equals(
    1. E,
    2. E
    )?,
  2. int hashCode(
    1. E
    )?,
  3. bool isValidKey(
    1. dynamic
    )?}
)

使用提供的 equals 创建哈希集以作为相等性比较。

提供的 equals 必须定义一个稳定的等价关系,且 hashCode 必须与 equals 保持一致性。

如果省略了 equalshashCode,则使用元素内置的 Object.==Object.hashCode

如果您提供 equalshashCode 之一,通常也应该提供另一个。

某些 equalshashCode 函数可能不适用于所有对象。如果提供了 isValidKey,则它用于检查一个不一定非得是 E 实例的潜在元素,例如 contains 方法的参数,它被类型化为 Object?。如果 isValidKey 对一个对象返回 false,则不调用 equalshashCode 函数,并假定等价于该对象的键不在映射中。默认的 isValidKey 函数仅测试对象是否是 E 的实例,这意味着它

HashSet<int>(equals: (int e1, int e2) => (e1 - e2) % 5 == 0,
             hashCode: (int e) => e % 5)

不需要 isValidKey 参数,因为它默认只接受由 equalshashCode 接受的 int 值。

如果既没有提供 equals,也没有提供 hashCode,也没有提供 isValidKey,则默认使用 isValidKey 接受所有值。默认的等价和散列操作假定在所有对象上工作。

同样,如果 equalsidenticalhashCodeidentityHashCode 且省略了 isValidKey,则结果集合是根据身份构建的,且 isValidKey 默认接受所有键。可以使用 HashSet.identity 直接创建此类映射。

实现

external factory HashSet(
    {bool Function(E, E)? equals,
    int Function(E)? hashCode,
    bool Function(dynamic)? isValidKey});