當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Dart HashMap構造函數用法及代碼示例


dart:collection 庫中HashMap構造函數 的用法介紹如下。

用法:

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

創建基於 Map 的無序 hash-table 。

創建的Map沒有以任何方式排序。當迭代鍵或值時,迭代順序是未指定的,除非它會保持不變,隻要Map沒有改變。

如果提供了equals,則用於將映射中的鍵與新鍵進行比較。如果省略equals,則使用 key 自己的Object.==

類似地,如果提供了hashCode,它將用於為鍵生成哈希值,以便將它們放置在映射中。如果省略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 的實例。

例子:

HashMap<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 。可以使用 HashMap.identity 直接創建這樣的Map。

相關用法


注:本文由純淨天空篩選整理自dart.dev大神的英文原創作品 HashMap<K, V> constructor。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。