嘛~
雖然Hashtable在某些地方很好用,但在某些情況下,反而成了礙手礙腳的。
Hashtable裡面的物件都是存成object,倘若要不斷的使用物件,就要不斷的轉型…
一來折損不少效能,二來程式碼看起來就很不舒服
其實,解決方法有很多種,只是找不到有詳盡介紹 C# 所有Collections的好文章。
最根本的做法就是直接去實作Collections使用的介面,但是又整個很麻煩的感覺。
一直在想,都有List<>的泛型了,為啥沒有對應Hashtable的泛型咧~
今天終於給我咕到一個好用的Collections可以取代之!
【C#食谱】【面食】菜单5:用泛型副本替换哈希表
從原本的…
Hashtable myList = new Hashtable(); myList.Add("第一項", "內容"); String tempStr = myList["第一項"] as String; |
換成…
Dictionary<String, String> myList = new Dictionary<String, String>(); myList.Add("第一項", "內容"); String tempStr = myList["第一項"]; |
嗯~
單從這短短幾行或許感覺不出來,但是當很多地方要用到就會整個很討厭了
主要還是要考慮消耗效能的問題,動態轉型很吃的…
當然,若是用來存放各種類型的物件,還是乖乖用Hashtable吧!
2008/10/04 Edit
「SortedList Class」和「SortedDictionary Class」也是支援泛型的。
另外找到一篇比較這三者的優劣…可參考參考
「[原创]Dictionary, SortedDictionary, SortedList 横向评测」
ADD | FIND | REMOVE | |
Dictionary | 265ms | 203ms | 187ms |
SortedDictionary | 1843ms | 828ms | 1234ms |
SortedList | N/A | N/A | N/A |
這是項目數量設為1,000,000個,尋找和移除500,000次的耗費時間。
ADD | FIND | REMOVE | |
Dictionary | 15ms | 31ms | 15ms |
SortedDictionary | 93ms | 46ms | 38ms |
SortedList | 8031ms | 15ms | 6046ms |
這是將項目數量和次數改為1/10之後的結果。
SortedList 不知道再慢什麼的
4. 小结
如果只
是当作索引使用, 请用 Dictionary.
如果需要查找最小的几个元素, 或者需要按顺序遍历元素, 就用 SortedDictionary.
如果输入/删除的元素是基本增序的, 或者访问次数远多于修改次数, 或者需要访问第 k 大的元素, 或者对内存吝啬得 BT 的情况, 用 SortedList 吧. (它居然成使用情况最多的了… orz)
再來個Dictionary vs Hashtable!
ADD | FIND | REMOVE | |
Dictionary(Of Long, Long) | 217ms |
203ms | 187ms |
Dictionary(Of Object, Object) | 468ms | 312ms | 234ms |
Hashtable | 859ms | 390ms | 218ms |
结论: 最好用 Dictionary 代替 Hashtable.