HashMap<K, V> 构造函数
创建一个基于 Map 的无序哈希表。
创建的映射在没有任何顺序。在遍历键或值时,遍历顺序是不确定的,除非在映射更改时保持相同。
如果提供了 equals,它将用于比较映射中的键与新键。如果省略了 equals,则使用键的 Object.== 而不是。
同样,如果提供了 hashCode,它将用于生成键的哈希值以将它们放置在映射中。如果省略了 hashCode,则使用键的 Object.hashCode。
使用的 equals 和 hashCode 方法应该始终一致,因此如果 equals(a, b),则 hashCode(a) == hashCode(b)。对象的哈希值或比较相等的对象不应在对象是映射中的键时改变。如果改变了,则结果是不可预测的。
如果您提供其中一个 equals 和 hashCode,通常也应该提供另一个。
某些 equals 或 hashCode 函数可能对于所有对象都不起作用。如果提供了 isValidKey,则用于检查可能不是 K 实例的潜在键,例如 operator []、remove 和 containsKey 的参数,这些都类型为 Object?。如果 isValidKey 返回 false,对于对象,则不调用 equals 和 hashCode 函数,并且假设在该映射中不存在与该对象相等键。默认情况下,isValidKey 函数仅检查对象是否是 K 的实例。
示例
HashMap<int,int>(equals: (int a, int b) => (b - a) % 5 == 0,
hashCode: (int e) => e % 5)
此示例映射不需要传递 isValidKey 函数。默认函数仅接受精确的 int 值,可以安全地传递给 equals 和 hashCode 函数。
如果既没有提供 equals,没有提供 hashCode,也没有提供 isValidKey,则默认的 isValidKey 接受所有键。默认的平等和哈希码操作已知的适用于所有对象。
同样,如果 equals 是 identical、hashCode 是 identityHashCode 并且省略了 isValidKey,则结果映射基于身份,默认 isValidKey 接受所有键。可以创建直接使用 HashMap.identity 的此类映射。
实现
external factory HashMap(
{bool Function(K, K)? equals,
int Function(K)? hashCode,
bool Function(dynamic)? isValidKey});