GetHashCode用于比较和相等

时间:2009-04-06 08:23:53

标签: .net hash

我有一个程序,我应该确保URL存在与否,如果存在于数据库中,我应该选择ID,如果不存在我应该将其插入数据库。

我有一个问题,GetHashCode是一种很好的方法来保存数据库中的哈希码并只是比较哈希码吗?我可以确定没有例外,哪个2个或更多URL具有相同的哈希码,如果没有,它是否与安装.NET Framework不同?

由于

4 个答案:

答案 0 :(得分:1)

  1. 不要使用开箱即用的GetHashCode(),它是星期,可能会在下一个版本中更改。
  2. 使用SHA1/SHA2使用您自己的哈希函数。
  3. 你需要处理逃避,I.E。 'A B'=='A%20B'
  4. 您还需要考虑区分大小写的问题。

答案 1 :(得分:0)

不,这不是一个好主意 - 因为GetHashcode()可能会在下一个.net框架版本中返回不同的结果。见msdn remarks

答案 2 :(得分:0)

不要将其用作标识 - GetHashCode可能会为不同的字符串生成相同的值。

GetHashCode结果是一个int32,因此它可能只存储4e9个不同的值。由于网页数量已经在这些值(http://everything2.com/index.pl?node_id=1268366)附近,您几乎可以肯定某些不同的网址会生成相同的哈希值。

答案 3 :(得分:0)

如果您确实要确保不存在重复项,则应该只存储该URL。你可以用散列做的唯一事情就是把它作为第一个指标,如果URL可能存在,但基本上你手动做索引,而好的数据库可以为你做这个。

除了如何存储它之外,还有不同的方法可以在不同的字符串中表示相同的URL,最好指定您希望URL的唯一性?