Dictionary,hashtable, stl:map有什么异同?
生活随笔
收集整理的這篇文章主要介紹了
Dictionary,hashtable, stl:map有什么异同?
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Dictionary,hashtable, stl:map有什么異同?
?
相同點:字典和map都是泛型,而hashtable不是泛型。
不同點:三者算法都不相同
Hashtable,看名字能想到,它是采用傳統的哈希算法:探測散列算法,而字典則采用的是散列拉鏈算法,效率較高,空間也小。Stl:map使用的是紅黑樹算法,效率最低為o(nlogn)
?
這里要注意的是 dictionary使用的是拉鏈式哈希算法,在算法內部要對KEY進行哈希計算,即 comparer.GetHashCode(object o),就是說在C#中以值類型作KEY時(整形除外)都會發生裝箱操作,
如以enum作key,是C#中造成GC ALLOC的典型原因。
注意數值類型(int, float, double等),int型作dictionary的key不會有GC ALLOC,這是因為c#有一個對應的重載,如comparer.GetHashCode(int key)的重載。
而其它類型則沒有對應重載,自定義類型當然不會有對應重載了。
posted on 2018-09-06 19:57 時空觀察者9號 閱讀(...) 評論(...) 編輯 收藏
總結
以上是生活随笔為你收集整理的Dictionary,hashtable, stl:map有什么异同?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于STRUCT优化的一个点
- 下一篇: UNITY 的GC ALLOC到底是什么