Dictionary 描述
字典 Dictionary 通過 Hash 桶算法進行O(1)查找數據,在 Hash 碰撞達到一定次數后會自動進行 Resize,也會在數組大小不足的時候會自動進行Resize。
如果自定義 Key 沒有重寫 GetHashCode 和 Equal 方法,則會調用基類 Object 的方法。
-
如果自定義 Key 是 Struct 的話,則會出現裝箱操作導致 GC Alloc。(舊版本的 Unity 支持 C# 不高,因此默認 Comparer 沒有對 Enum 進行處理,導致 Enum 作為 Key 也會造成 GC)
-
導致相同數據的兩個對象判定不相等。
Comparer 構建
-
在初始化 Dictionary 的時候需要構造對應的 Comparer。
-
如果沒有傳入 Comparer 的時候,會根據 Key 的類型自動創建 Comparer。
-
其中進行插入,查找等操作時候,通過調用 Comparer 的 GetHashCode 和 Equal 方法來檢查對應桶是否存在對應Key。