Dictionary 與 Hashtable
當然選擇 Dictionary ,完全可以按最基本的資料結構知識來判斷
Dictionary <TKey, TValue> 是 Hashtable 的泛型版本,
List <T> 是 ArrayList 的泛型版本,
4.
前者基于雜湊演算法,或者内部實際上使用數組(清單)存儲,
那麼你可以選擇了
如果需要非常快地添加、删除和查找項目,而且不關心集合中項目的順序,那麼首先應該考慮使用 System.Collections.Generic.Dictionary <TKey, TValue> (或者您正在使用 .NET Framework 1.x,可以考慮 Hashtable)。三個基本操作(添加、删除和包含)都可快速操作,即使集合包含上百萬的項目。另一方面,利用 List <T> (或 .NET Framework 1.x 中的 ArrayList)插入和删除項目所需的時間都可能有所不同。(List <T> 和 ArrayList 都在基礎數組中存儲項目,并保持順序。添加項目可能需要移動基礎數組中現有的項目以騰出空間。在末尾添加項目不需要進行任何移動,而且速度非常快)。
如果您的使用模式很少需要删除和大量添加,而重要的是保持集合的順序,那麼您仍然可以選擇 List <T> 。雖然查找速度可能比較慢(因為在搜尋目标項目時需要周遊基礎數組),但可以保證集合會保持特定的順序。另外,您可以選擇 Queue <T> 實作先進先出 (FIFO) 順序或 Stack <T> 實作後進先出 (LIFO) 順序。雖然 Queue <T> 和 Stack <T> 都支援枚舉集合中的所有項目,但前者隻支援在末尾插入和從開頭删除,而後者隻支援從開頭插入和删除。
如果需要在實作快速插入的同時保持順序,那麼使用新的 LinkedList <T> 集合可幫助您提高性能。與 List <T> 不同,LinkedList <T> 是作為動态配置設定的對象鍊實作。與 List <T> 相比,在集合中間插入對象隻需要更新兩個連接配接和添加新項目。從性能的角度來看,連結清單的缺點是垃圾收集器會增加其活動,因為它必須周遊整個清單以確定沒有對象沒有被釋放。另外,由于每個節點相關的開銷以及每個節點在記憶體中的位置等原因,大的連結清單可能會出現性能問題。雖然将項目插入到 LinkedList <T> 的實際操作比在 List <T> 中插入要快得多,但是找到要插入新值的特定位置仍需周遊清單并找到正确的位置。
如前所述,Dictionary <TKey, TValue> 可能最适用于快速插入和查找項目。但是,較快的查找速度隻是針對普通情況而言,某些資料集可能導緻性能急劇下降。SortedDictionary <TKey,TValue> 是一個不同的實作,它用平衡樹實作作為基礎資料存儲;這相對提高了查找速度并保持項目的排列順序,但插入很有可能會慢一些(随集合中的項目數量不同而有所差異)。或者也可以用 SortedList <Tkey,TValue> ,它使用兩個獨立的數組分别儲存鍵和值,并保持兩者的順序(最壞的情況是必須移動所有鍵和值)。
http://msdn.microsoft.com/msdnmag/issues/07/08/CLRInsideOut/default.aspx?loc=zh
5。
Dictionary.ContainsKey查找時好像也是用二分查找實作的
=======
得補資料結構去了