将密钥添加到列表或集合中 - 在添加密钥之前散列密钥是否有任何价值

时间:2010-09-17 16:57:08

标签: c# string list hash hashtable

我偶然发现了一些代码,这些代码将字符串添加到List中,但在添加之前对值进行散列。

它在字符串值上使用MD5哈希(MD5CryptoServiceProvider),然后将其添加到列表中。

在速度方面是否有任何价值可以在列表中找到密钥,或者这只是不必要的?

3 个答案:

答案 0 :(得分:1)

我不打算知道您正在查看的代码的作者是如何处理他们的列表的。但我要说的是,如果你有一个大型列表并且搜索性能至关重要,那么就有一个类。 HashSet<T>很适合您的需求。

答案 1 :(得分:0)

如果目标是提高性能,我认为没有必要为List执行此操作。字符串是字符串,无论它们是否经过哈希处理都以相同的方式查找。

答案 2 :(得分:0)

首先,列表(List<T>)没有“键”。但是,Dictionary<TKey, TValue>可以。

其次,回答你的性能问题:不,在计算哈希时实际上存在性能惩罚。但是,在你得出不必要的结论之前,检查一下周围的代码并考虑作者是否真的需要MD5 hashsum而不是字符串本身?

第三,如果你需要有效地查找某些内容,你可以使用HashSet<T>,如果你只是需要检查它的存在,或Dictionary<TKey, TValue>如果你需要关联你查找的键价值。

如果将字符串放在字典或散列集中,C#就会从您放入的任何字符串生成散列值。这通常使用比MD5快得多的散列算法。