我偶然发现了一些代码,这些代码将字符串添加到列表中,但在添加之前对值进行散列处理。
它对字符串值使用MD5散列(MD5CryptoServiceProvider),然后将其添加到列表中。
在查找列表中的键的速度方面,这样做有什么价值吗?或者这是不必要的吗?
发布于 2010-09-18 01:18:25
首先,列表(List<T>)没有“键”。但是,Dictionary<TKey, TValue>是这样的。
其次,回答你的性能问题:不,在计算散列时实际上存在性能损失。但是,在得出不必要的结论之前,请检查周围的代码,并考虑作者是否实际上需要MD5散列和而不是字符串本身?
第三,如果您需要有效地查找某些内容,如果只需要检查其是否存在,则可以使用HashSet<T>;如果需要将查找的键与值相关联,则可以使用Dictionary<TKey, TValue>。
如果您将字符串放入字典或哈希集,C#将根据您输入的任何字符串生成散列值。这通常使用比MD5快得多的散列算法。
发布于 2010-09-18 01:04:06
我不会假设知道您正在查看的代码的作者对他们的列表做了什么。但我要说的是,如果你有一个很大的列表,并且搜索的性能很关键,那么就有一个类来解决这个问题。HashSet<T>将很好地满足您的需求。
发布于 2010-09-18 01:01:28
我认为如果List的目标是提高性能,那么就没有必要这么做。字符串是字符串,无论它们是否经过哈希处理,都会以相同的方式进行查找。
https://stackoverflow.com/questions/3737362
复制相似问题