唯一的自定义字符串哈希

问题描述 投票:-1回答:1

我知道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,否则可能会发生冲突。

string hash jvm unique hashcode
1个回答
1
投票

如果字符空间的大小为256,那么您实际上要做的就是converting from base 256 to base 10。所以是的,您字母表中所有可能的字符串都将映射到一个唯一的整数。

就是说,这并不是真正的哈希函数,因为它是从256个字母的字符串空间到自然数(0、1、2、3,...)的一个内射函数。它不是双射的唯一原因是因为您的域是[1,256]而不是[0,255](这与上面的内容无关)。

正如@andand所说,如果有一个最大值,那么您肯定会碰到碰撞,如果没有最大值,那么这实际上不是hash函数。

© www.soinside.com 2019 - 2024. All rights reserved.