加载中…
个人资料
Yode
Yode
  • 博客等级:
  • 博客积分:0
  • 博客访问:592,114
  • 关注人气:250
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
相关博文
推荐博文
谁看过这篇博文
加载中…
正文 字体大小:

murmurhash2

(2010-06-24 11:40:36)
标签:

it

分类: java
murmurhash2貌似是一款巨牛无比的字符串hash

http://murmurhash.googlepages.com/

速度评测

    OneAtATime - 354.163715 mb/sec
    FNV - 443.668038 mb/sec
    SuperFastHash - 985.335173 mb/sec
    lookup3 - 988.080652 mb/sec
    MurmurHash 1.0 - 1363.293480 mb/sec
    MurmurHash 2.0 - 2056.885653 mb/sec
hash效果图
http://murmurhash.googlepages.com/avalanche

MurmurHash2
public class MurmurHash2 {

 @SuppressWarnings("fallthrough")
     public static int hash(byte[] data, int seed) {
     // 'm' and 'r' are mixing constants generated offline.
     // They're not really 'magic', they just happen to work well.
     int m = 0x5bd1e995;
     int r = 24;

     // Initialize the hash to a 'random' value
     int len = data.length;
     int h = seed ^ len;

     int i = 0;
     while (len  >= 4) {
         int k = data[i + 0] & 0xFF;
         k |= (data[i + 1] & 0xFF) << 8;
         k |= (data[i + 2] & 0xFF) << 16;
         k |= (data[i + 3] & 0xFF) << 24;

         k *= m;
         k ^= k >>> r;
         k *= m;

         h *= m;
         h ^= k;

         i += 4;
         len -= 4;
     }

     switch (len) {
     case 3: h ^= (data[i + 2] & 0xFF) << 16;
     case 2: h ^= (data[i + 1] & 0xFF) << 8;
     case 1: h ^= (data[i + 0] & 0xFF);
             h *= m;
     }

     h ^= h >>> 13;
     h *= m;
     h ^= h >>> 15;

     return h;
 }

0

阅读 评论 收藏 转载 喜欢 打印举报/Report
  • 评论加载中,请稍候...
发评论

    发评论

    以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

      

    新浪BLOG意见反馈留言板 电话:4000520066 提示音后按1键(按当地市话标准计费) 欢迎批评指正

    新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 会员注册 | 产品答疑

    新浪公司 版权所有