如何在.NET中查找哈希表?

时间:2011-08-13 00:24:41

标签: .net search hashtable linear

我试图比较哈希表查找和线性搜索的性能。我创建了一个包含1000个项目的哈希表,并发现在哈希表中查找的时间为0.0002(我使用DateTime.Now查找查找前后的系统时间并减去它们)。我在一个数组中有相同的1000行,并使用线性搜索查找相同的值。事实证明它比哈希表查找所花费的时间要少。

我认为哈希表比线性搜索更快。它是如何工作的 ?

由于

2 个答案:

答案 0 :(得分:3)

首先,你的计时机制并不好。如果要测试性能,则应使用高分辨率计时器,如System.Diagnostics.Stopwatch

其次,您需要在查找空间上随机均匀分布的许多查找中找到平均查找时间,而不仅仅是一个特定项目的查找时间。

答案 1 :(得分:1)

答案可以在这篇文章中找到:

An Extensive Examination of Data Structures Using C# 2.0

在“ The System.Collections.Hashtable Class ”一节

这是(极端)简短的概要:

添加到集合(Add(object key, object value)):

  1. 接收keyvalue参数
  2. 将哈希算法应用于key参数。这是一个复杂的公式,它使用Object.GetHashCode()方法并在索引中产生一个位于0和hashsize之间的位置(哈希表中的插槽数({{{}使用的内部查找结构1}})。
  3. 在该位置插入DictionaryEntry对象。
  4. 访问集合中的项目(System.Collections.HashTable):

    1. 接收object this[object key] { set; get; }参数
    2. 使用key参数上的hash algorighm计算哈希表中的位置。
    3. 返回存储在该位置的项目的key