id类特征如何做hash?

参考

  • 几种经典的hash算法。Java版的各种hash算法实现。

算法

乘法hash。jdk5.0里面的String类的hashCode()方法也使用乘法Hash,它使用的乘数是31。推荐的乘数还有:131, 1313, 13131, 131313等等。

 static int bernstein(String key)
 {
   int seed = 131;//31, 131, 1313, 13131, 131313
   int hash = 0;
   for (int i=0; i<key.length(); ++i) hash = seed*hash + key.charAt(i);
   return hash;
 }

处理id特征。可以用乘法hash算法,将id字符串转换为整数。该方法能够适应新id不断产生的情况,这时老id转换后的整数不变,新id会转换为新的整数,基本不会相互影响。

hash冲突。id转换为整数后,可能有hash冲突的情况,例如冲突率可能4%。如果影响较大,还需要想办法减小hash冲突率。

你可能感兴趣的:(推荐算法)