当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Dart LinkedHashMap构造函数用法及代码示例


dart:collection 库中LinkedHashMap构造函数 的用法介绍如下。

用法:

LinkedHashMap<K, V>(
   {bool equals(
   K,    
   K   
)?,    
   int hashCode(
   K   
)?,    
   bool isValidKey(
   dynamic   
)?}   
)

创建一个基于 insertion-ordered hash-table 的 Map

如果提供了equals,则用于将表中的键与新键进行比较。如果省略equals,则使用 key 自己的Object.==

类似地,如果提供了hashCode,则它用于为键生成哈希值,以便将它们放入哈希表中。如果省略,则使用 key 自己的Object.hashCode

使用的 equalshashCode 方法应该始终保持一致,因此如果 equals(a, b)hashCode(a) == hashCode(b) 。当对象在表中时,对象的哈希值或其比较值不应更改。如果它确实发生了变化,结果是不可预测的。

如果您提供 equalshashCode 之一,则通常还应提供另一个。

某些equalshashCode 函数可能不适用于所有对象。如果提供了 isValidKey ,则它用于检查不一定是 K 实例的潜在 key ,例如 operator []removecontainsKey 的参数,它们的类型为 Object? 。如果 isValidKey 返回 false ,则对于对象,不调用 equalshashCode 函数,并且假定映射中没有与该对象相等的键。 isValidKey 函数默认只测试对象是否是 K 的实例。

例子:

LikedHashMap<int,int>(equals: (int a, int b) => (b - a) % 5 == 0,
                      hashCode: (int e) => e % 5)

此示例映射不需要传递 isValidKey 函数。默认函数精确地接受 int 值,这些值可以安全地传递给 equalshashCode 函数。

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

同样,如果 equalsidenticalhashCodeidentityHashCode 并且 isValidKey 被省略,则生成的映射是基于身份的,并且 isValidKey 默认接受所有 key 。可以使用 LinkedHashMap.identity 直接创建这样的Map。

相关用法


注:本文由纯净天空筛选整理自dart.dev大神的英文原创作品 LinkedHashMap<K, V> constructor。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。