LinkedHashMap<K, V> 构造函数
创建一个插入有序的哈希表,基于Map。
如果提供了 equals,则它用于比较表中与新键的键。如果省略了 equals,则使用键自带的Object.==进行比较。
类似地,如果提供了 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 的实例。
示例
LikedHashMap<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 默认为接受所有键。此类映射可以直接使用 LinkedHashMap.identity 创建。
实现
external factory LinkedHashMap(
{bool Function(K, K)? equals,
int Function(K)? hashCode,
bool Function(dynamic)? isValidKey});