String.GetHashCode 是怎样能够保证唯一的呢?

wql425 2005-11-18 09:26:47
字符串的长度不限,组合不计其数,String.GetHashCode怎样保证它的唯一性呢?谁知道啊?
...全文
1405 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
jetxia 2005-11-18
  • 打赏
  • 举报
回复
1.0和2.0的hash算法不一样,所以返回的值就不一样了
s5689412 2005-11-18
  • 打赏
  • 举报
回复
唉,前面不是说了么,“HashCode并不是要保证所有字符串的唯一性,它只是保证在当前系统的应用上是唯一的”。
wql425 2005-11-18
  • 打赏
  • 举报
回复
呵呵,其实我就是想既然说“String 类提供的 GetHashCode 实现为唯一的字符串值返回唯一的哈希代码。”
那他又怎么可以保证唯一呢?
s5689412 2005-11-18
  • 打赏
  • 举报
回复
如果是你说的这种情况,那还是建议使用GDUI了。
wql425 2005-11-18
  • 打赏
  • 举报
回复
其实我的意思也很简单,我们把全球60亿人的DNA组成一个字符串,然后我要取得这些字串的HashCode存入数据库中,Int32只有40多亿,那另外的10几亿怎么保证?而且用什么方法保证所能够取得的HashCode唯一 “String 类提供的 GetHashCode 实现为唯一的字符串值返回唯一的哈希代码。”
anggogo 2005-11-18
  • 打赏
  • 举报
回复
why don't you just create your own hash code generator method
s5689412 2005-11-18
  • 打赏
  • 举报
回复
GUID也没有说能保证理论上的唯一,只不过重复的可能性在绝大多数的情况下都可以忽略不计。

因为GUID是个随机数,所以并不绝对保证唯一性,但发生标识符相重的可能性非成小。从理论上江,如果一台机器每秒产生10 000 000个GUID,则可以保证(概率意义上)3240年不重复。

128位GUID是个随机数,其随机性由两方面的特性保证:一方面是空间,对于网络中的计算机通常取网络适配器的地址值,没有网络适配器的机器用其他随机数生成算法产生(具体什么算法呢?);另一方面是时间值,同一机器在不同时候产生的标识符总不相同。
(摘自COM原理与应用 潘爱民著)
wql425 2005-11-18
  • 打赏
  • 举报
回复
字符串的组合不会无限吗?那Guid又怎么可以保证唯一呢?
wql425 2005-11-18
  • 打赏
  • 举报
回复
.net Object.GetHashCode 方法的帮助中不是说“String 类提供的 GetHashCode 实现为唯一的字符串值返回唯一的哈希代码。”吗?
zhy0101 2005-11-18
  • 打赏
  • 举报
回复
况且Hash算法并不保证绝对的唯一
zhy0101 2005-11-18
  • 打赏
  • 举报
回复
能用的字符有限,字符串长度有限,字符串的组合怎么会是无限的
s5689412 2005-11-18
  • 打赏
  • 举报
回复
也许你没明白我的意思,理论上字符串的组合是无限的,但是HashCode并不是要保证所有字符串的唯一性,它只是保证在当前系统的应用上是唯一的,所以Int32对目前的32位系统来说是足够了的。
wql425 2005-11-18
  • 打赏
  • 举报
回复
内存有限也只能限定一个字串的hashcode值,但是字串的组合是无限的啊
s5689412 2005-11-18
  • 打赏
  • 举报
回复
Int32=2^32=4G=32位Windows所能操作的最大内存

Int32类型的值必定是有限的,但是你的内存不是无限的......
wql425 2005-11-18
  • 打赏
  • 举报
回复
我试了一下,在.net framework 1.0和2.0下两个字串的hashcode不同,但是相同的framework我把程序考到哪台机子上都是一样的,我现在的主要疑问是:我就在同一台电脑,同一个程序中,无论我输入任意的字串,.net怎样保证hashcode唯一呢?Int32类型的值必定有限啊
datauser 2005-11-18
  • 打赏
  • 举报
回复
http://msdn2.microsoft.com/en-us/library/system.string.gethashcode.aspx#
wql425 2005-11-18
  • 打赏
  • 举报
回复
up
s5689412 2005-11-18
  • 打赏
  • 举报
回复
是的,我承认在这一点上我的理解上是有问题的,在看你给出的那两个字符串之后,
的确是相同的hashcode,
不过在此之前,没有事实说话的情况下,我只能以MSDN上的为准,是吧?
wql425 2005-11-18
  • 打赏
  • 举报
回复
哈哈,谢谢啦,大家准备接分吧
tiaoci 2005-11-18
  • 打赏
  • 举报
回复
to wql425(wql) , 我眼睛一瞄就瞄出来了啊,哈

其实就是用随机数生成字符串,放到Hashtable中

直到发现重复的HashCode
加载更多回复(12)

110,525

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧