我正在开发一个基于Hashing的程序.我的问题是,字符串的HashCode对于整个应用程序将保持不变.
我问这个的原因是因为,Mecached服务器内部的KetamaMemcachedSessionLocator以这种方式工作如果有两个运行Memcache的服务器,我想从特定服务器找到一个密钥.
String key = "MyString";
int keyid = key.hashCode();
int v = keyid % 1; //( I assume that this will contact the First Server to retrieve that value )
int v = keyid % 2; //( I assume that this will contact the Second Server to retrieve that value )
String value = MemcachedClient.get(key, v);
Run Code Online (Sandbox Code Playgroud)
其次是基于本网站实施上述内容
http://dev.mysql.com/doc/refman/5.0/en/ha-memcached-using-hashtypes.html
如果您发现上述方式有问题,请分享您的意见.
Ami*_*nde 10
根据哈希码合同,它总是相同的if string1.eqauls(string2)
The java.lang.String hash function
为了提供快速实现,早期版本的Java String类提供了一个hashCode()实现,该实现最多考虑从字符串中挑选出16个字符.对于某些常见数据,这种方法效果很差,提供了不可接受的集群结果,从而降低了散列表性能.
从Java 1.2开始,java.lang.String类在字符串的整个文本上使用乘积和算法实现其hashCode().例如,给定java.lang.String类的实例,将具有由其定义的哈希码h(s)
![h(s)=\sum_ {i = 0} ^ {n-1} s [i]\cdot 31 ^ {n-1-i}](https://i.stack.imgur.com/i93PQ.png)
其中术语使用Java 32位int加法求和,s [i]表示字符串的第i个字符,n是s的长度.
与任何一般的散列函数一样,碰撞也是可能的.例如,字符串"FB"和"Ea"具有相同的散列值.String的hashCode()实现使用素数31,'a'和'B'之间的差值仅为31,因此计算为70×31 + 66 = 69×31 + 97.
检查Collections Framework Enhancements in Java SE 7你看到它有变化,谁知道会有变化.
替代散列函数仅适用于String类型的键.