LinkedHashSet<E>构造器

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

使用提供的equalshashCode创建一个插入顺序的哈希集合。

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

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

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

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

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

如果没有提供equalshashCodeisValidKey,则默认的isValidKey接受所有值。默认的等价性和哈希码操作假定适用于所有对象。

同样,如果equalsidenticalhashCodeidentityHashCode,且省略了isValidKey,则生成的集合是身份基础,并且默认接受所有键。这样的映射可以直接使用LinkedHashSet.identity)创建。

实现

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