我正在尝试创建一个带有unix路径作为值的zookeeper节点(如/x/home/rrs/data0
),但这是不允许的。
所以我想到生成路径的哈希码然后用它来创建一个节点。 但我读了关于哈希码的以下内容:
我应该继续使用哈希码还是我的用例有哪些其他选项?
此外,如果我一直保持字符串相同,是否保证每次都生成相同的hashCode ?
答案 0 :(得分:2)
是的,相同的字符串将始终生成相同的哈希码。
哈希码确实发生碰撞,类似(但不同)的字符串碰撞的可能性非常小(这是一般的想法)。您的应用程序应该能够从冲突中恢复(至少不会中断)。
琴弦的性质是什么?他们只是信件吗?最大长度?这些属性可用于生成更好的哈希码。我所知道的最好的技术之一是Zobrist键。根据字符串的性质,这可能是一种选择。
答案 1 :(得分:0)
这取决于你想要做什么。
但你是对的:Java hashCodes并非设计为无冲突。
如果您需要某种唯一标识符,可以在字符串上使用加密哈希函数(例如SHA-256,MD5等)。
如果您的字符串中的某些字符出现问题,请更换它们,例如用下划线。
取决于Zookeeper是什么/做什么,也许hashCode根本不是问题。 EHCache使用它,它对于分散的哈希表非常好。
它很糟糕,但String的hashCode确实 为同一个字符串始终生成相同的哈希码。这是因为它已记录在案,因此无法更改。 (但请注意:这并不包含相同字符串的不同表示,就像它在unicode中可能一样。但我认为这不是问题。)