c#關於Dictionary中自定義Key

Dictionary 描述

字典 Dictionary 經過 Hash 桶算法進行O(1)查找數據,在 Hash 碰撞達到必定次數後會自動進行 Resize,也會在數組大小不足的時候會自動進行Resize。算法

若是自定義 Key 沒有重寫 GetHashCode 和 Equal 方法,則會調用基類 Object 的方法。數組

  • 若是自定義 Key 是 Struct 的話,則會出現裝箱操做致使 GC Alloc。(舊版本的 Unity 支持 C# 不高,所以默認 Comparer 沒有對 Enum 進行處理,致使 Enum 做爲 Key 也會形成 GC)對象

  • 致使相同數據的兩個對象斷定不相等。blog

Comparer 構建

  • 在初始化 Dictionary 的時候須要構造對應的 Comparer。
    it

  • 若是沒有傳入 Comparer 的時候,會根據 Key 的類型自動建立 Comparer。
    io

  • 其中進行插入,查找等操做時候,經過調用 Comparer 的 GetHashCode 和 Equal 方法來檢查對應桶是否存在對應Key。
    方法

相關文章
相關標籤/搜索