我知道JVM中的hashCode()
由于各种可能的字符而无法使字符串的哈希唯一。
但是假设我们只有256个唯一字符。这个公式会为每个可能的String产生唯一的哈希吗?
string[0] * 256^0 + string[1] * 256^1 + ... + string[length-1] * 256^(length-1).
其中“ string [x]”是我角色的编码。
注意string[x]
必须在[1, 256]
范围内,我们不能包含0,否则可能会发生冲突。
如果字符空间的大小为256,那么您实际上要做的就是converting from base 256 to base 10。所以是的,您字母表中所有可能的字符串都将映射到一个唯一的整数。
就是说,这并不是真正的哈希函数,因为它是从256个字母的字符串空间到自然数(0、1、2、3,...)的一个内射函数。它不是双射的唯一原因是因为您的域是[1,256]而不是[0,255](这与上面的内容无关)。
正如@andand所说,如果有一个最大值,那么您肯定会碰到碰撞,如果没有最大值,那么这实际上不是hash
函数。