HashSet<E> 构造函数
使用提供的 equals
创建哈希集以作为相等性比较。
提供的 equals
必须定义一个稳定的等价关系,且 hashCode
必须与 equals
保持一致性。
如果省略了 equals
或 hashCode
,则使用元素内置的 Object.== 和 Object.hashCode。
如果您提供 equals
和 hashCode
之一,通常也应该提供另一个。
某些 equals
或 hashCode
函数可能不适用于所有对象。如果提供了 isValidKey
,则它用于检查一个不一定非得是 E
实例的潜在元素,例如 contains 方法的参数,它被类型化为 Object?
。如果 isValidKey
对一个对象返回 false
,则不调用 equals
和 hashCode
函数,并假定等价于该对象的键不在映射中。默认的 isValidKey
函数仅测试对象是否是 E
的实例,这意味着它
HashSet<int>(equals: (int e1, int e2) => (e1 - e2) % 5 == 0,
hashCode: (int e) => e % 5)
不需要 isValidKey
参数,因为它默认只接受由 equals
和 hashCode
接受的 int
值。
如果既没有提供 equals
,也没有提供 hashCode
,也没有提供 isValidKey
,则默认使用 isValidKey
接受所有值。默认的等价和散列操作假定在所有对象上工作。
同样,如果 equals
是 identical,hashCode
是 identityHashCode 且省略了 isValidKey
,则结果集合是根据身份构建的,且 isValidKey
默认接受所有键。可以使用 HashSet.identity 直接创建此类映射。
实现
external factory HashSet(
{bool Function(E, E)? equals,
int Function(E)? hashCode,
bool Function(dynamic)? isValidKey});