簡體   English   中英

列表與字典(Hashtable)

[英]List vs Dictionary (Hashtable)

這可能是一個愚蠢的問題,但我讀到HashtablesDictionaries比列表更快,因為他們用鍵索引項目。

我知道ListArray是針對沒有值的元素,而Dictionary是針對具有值的元素。 因此,我認為擁有一個具有您需要的值作為鍵的Dictionary並且所有值都相等的Dictionary可能是明智的嗎?

更新

基於評論,我認為我需要的是HashSet 這個問題談到了他們的表現。

Dictionary / Hashtable與List /數組之間也存在一些缺點:

  • 您必須使用每次查找計算對象的哈希值。
  • 對於小型集合,迭代數組可能比計算該散列更快,特別是因為散列不能保證是唯一的1
  • 他們不擅長迭代項目列表。
  • 他們不擅長存儲重復的條目(有時你合法地想要一個值在一個數組中多次顯示)
  • 有時類型沒有與之關聯的好鍵

使用適合的情況。 有時這將是一個列表或一個數組。 有時它會是一個字典。 你幾乎不應該再使用HashTable了(如果你真的不存儲你正在存儲的類型,則更喜歡Dictionary <KeyType,Object>)。

1它通常是唯一的,但由於沖突的可能性很小,因此集合必須在計算哈希值后檢查存儲桶。

“更快”取決於你需要它們。

.NET List只是連續內存的一塊(這不是鏈接列表),這使得順序訪問非常有效(特別是當您考慮緩存和預取現代CPU的影響時)或“隨機”通過已知的整數索引。 搜索或插入元素(特別是在中間) - 不是那么多。

Dictionary是一種關聯數據結構 - 一個鍵可以是任何可哈希的(不僅僅是整數索引),但是元素不是以“有意義”的方式排序,而通過已知鍵的訪問不如List的整數索引那么快。

因此,為工作選擇合適的工具。

您的語句“列表或數組用於沒有值的元素,而字典用於具有值的元素”,並非嚴格來說。

更准確地說,List是元素的集合,Hashtable或Dictionary是元素的集合以及用於訪問每個元素的唯一鍵。

將列表用於極少數元素的集合,或者只需要訪問整個集合,而不是集合中的單個元素。

當集合很大時和/或當您需要查找/訪問集合的各個成員時,請使用Hashtable或Dictionary。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM