好的,我需要一个散列函数来满足以下要求。这个想法是能够将属于相同逻辑结构但存储在文件系统的不同物理区域中的目录链接在一起。
我需要用 Java 实现它,它必须在执行会话中保持一致,并且可以返回很长的值。
我将散列目录名称/字符串。这应该可以工作,"somefolder1"
并且"somefolder2"
将返回不同的哈希值,就像"JJK"
和"JJL"
. 我也想知道什么时候可能发生冲突。
有什么建议么?
谢谢
好的,我需要一个散列函数来满足以下要求。这个想法是能够将属于相同逻辑结构但存储在文件系统的不同物理区域中的目录链接在一起。
我需要用 Java 实现它,它必须在执行会话中保持一致,并且可以返回很长的值。
我将散列目录名称/字符串。这应该可以工作,"somefolder1"
并且"somefolder2"
将返回不同的哈希值,就像"JJK"
和"JJL"
. 我也想知道什么时候可能发生冲突。
有什么建议么?
谢谢
您还没有描述在什么情况下不同的字符串应该返回相同的哈希值。
一般来说,我会通过首先实现相等函数来设计散列函数。这应该会告诉你哪些数据需要包含在哈希中,哪些应该被丢弃。如果两个不同数据位之间的相等性很复杂(例如不区分大小写),那么希望该特定比较会有相应的散列函数。
无论您做什么,都不要假设相等的散列意味着相等的键(即散列是唯一的)——这始终是潜在问题的原因。
Java 的 String 哈希码会给你一个int
,如果你想要一个long
,你可以为字符串取 MD5 和的最低有效 64 位。
可能会发生碰撞,您的系统必须为此做好准备。也许如果你提供更多关于哈希码将用于什么的细节,我们可以看到冲突是否会导致问题。