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});