我想为android中的字符串生成一个唯一的哈希码.是否有任何预定义库或我们必须手动生成.如果有任何正文,请提供链接或代码.
为什么String.hashcode()有这么多冲突?
我在jdk1.6中读取String.hashCode(),下面是代码
public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
Run Code Online (Sandbox Code Playgroud)
这对我来说很混乱,因为它有很多冲突; 虽然它不需要是唯一的(我们仍然可以依赖于equals()),但是更少的冲突意味着更好的性能而无需访问链表中的条目.
假设我们有两个字符,那么只要我们找到两个匹配下面的方程的字符串,那么我们就会有相同的hashcode()
a * 31 +b = c * 31 +d
Run Code Online (Sandbox Code Playgroud)
很容易得出结论,(a-c) * 31 = d-b
一个简单的例子是make ac = 1和db = 31; 所以我写下面的代码进行简单的测试
public void testHash() {
System.out.println("A:" …Run Code Online (Sandbox Code Playgroud) 我有一个带有String的对象,该String包含唯一的id.(例如"ocx7gf"或"67hfs8")我需要为它提供一个int hascode()的实现,这显然是唯一的.
如何以最简单/最快的方式将字符串转换为唯一的int?
10X.
编辑 - 好的.我已经知道String.hashcode是可能的.但不建议在任何地方使用.实际上'如果不推荐任何其他方法 - 我是否应该使用它,如果我的对象在集合中,我需要哈希码.我应该将其连接到另一个字符串以使其更成功吗?