文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java常用HASH算法总结【经典实例】

2023-05-31 01:58

关注

本文实例讲述了Java常用HASH算法。分享给大家供大家参考,具体如下:

public class HashAlgorithms{    public static int additiveHash(String key, int prime)  {    int hash, i;    for (hash = key.length(), i = 0; i < key.length(); i++)      hash += key.charAt(i);    return (hash % prime);  }    public static int rotatingHash(String key, int prime)  {    int hash, i;    for (hash=key.length(), i=0; i<key.length(); ++i)      hash = (hash<<4)^(hash>>28)^key.charAt(i);    return (hash % prime);    //  return (hash ^ (hash>>10) ^ (hash>>20));  }  // 替代:  // 使用:hash = (hash ^ (hash>>10) ^ (hash>>20)) & mask;  // 替代:hash %= prime;    static int M_MASK = 0x8765fed1;    public static int oneByOneHash(String key)  {    int  hash, i;    for (hash=0, i=0; i<key.length(); ++i)    {      hash += key.charAt(i);      hash += (hash << 10);      hash ^= (hash >> 6);    }    hash += (hash << 3);    hash ^= (hash >> 11);    hash += (hash << 15);    //  return (hash & M_MASK);    return hash;  }    public static int bernstein(String key)  {    int hash = 0;    int i;    for (i=0; i<key.length(); ++i) hash = 33*hash + key.charAt(i);    return hash;  }  //  //// Pearson's Hash  // char pearson(char[]key, ub4 len, char tab[256])  // {  //  char hash;  //  ub4 i;  //  for (hash=len, i=0; i<len; ++i)  //   hash=tab[hash^key[i]];  //  return (hash);  // }  //// CRC Hashing,计算crc,具体代码见其他  // ub4 crc(char *key, ub4 len, ub4 mask, ub4 tab[256])  // {  //  ub4 hash, i;  //  for (hash=len, i=0; i<len; ++i)  //   hash = (hash >> 8) ^ tab[(hash & 0xff) ^ key[i]];  //  return (hash & mask);  // }    public static int universal(char[]key, int mask, int[] tab)  {    int hash = key.length, i, len = key.length;    for (i=0; i<(len<<3); i+=8)    {      char k = key[i>>3];      if ((k&0x01) == 0) hash ^= tab[i+0];      if ((k&0x02) == 0) hash ^= tab[i+1];      if ((k&0x04) == 0) hash ^= tab[i+2];      if ((k&0x08) == 0) hash ^= tab[i+3];      if ((k&0x10) == 0) hash ^= tab[i+4];      if ((k&0x20) == 0) hash ^= tab[i+5];      if ((k&0x40) == 0) hash ^= tab[i+6];      if ((k&0x80) == 0) hash ^= tab[i+7];    }    return (hash & mask);  }    public static int zobrist( char[] key,int mask, int[][] tab)  {    int hash, i;    for (hash=key.length, i=0; i<key.length; ++i)      hash ^= tab[i][key[i]];    return (hash & mask);  }  // LOOKUP3  // 见Bob Jenkins(3).c文件  // 32位FNV算法  static int M_SHIFT = 0;    public static int FNVHash(byte[] data)  {    int hash = (int)2166136261L;    for(byte b : data)      hash = (hash * 16777619) ^ b;    if (M_SHIFT == 0)      return hash;    return (hash ^ (hash >> M_SHIFT)) & M_MASK;  }    public static int FNVHash2(byte[] data)  {    final int p = 16777619;    int hash = (int)2166136261L;    for(byte b:data)      hash = (hash ^ b) * p;    hash += hash << 13;    hash ^= hash >> 7;    hash += hash << 3;    hash ^= hash >> 17;    hash += hash << 5;    return hash;  }    public static int FNVHash2(String data)  {    final int p = 16777619;    int hash = (int)2166136261L;    for(int i=0;i<data.length();i++)      hash = (hash ^ data.charAt(i)) * p;    hash += hash << 13;    hash ^= hash >> 7;    hash += hash << 3;    hash ^= hash >> 17;    hash += hash << 5;    return hash;  }    public static int intHash(int key)  {    key += ~(key << 15);    key ^= (key >>> 10);    key += (key << 3);    key ^= (key >>> 6);    key += ~(key << 11);    key ^= (key >>> 16);    return key;  }    public static int RSHash(String str)  {    int b  = 378551;    int a  = 63689;    int hash = 0;    for(int i = 0; i < str.length(); i++)    {      hash = hash * a + str.charAt(i);      a  = a * b;    }    return (hash & 0x7FFFFFFF);  }      public static int JSHash(String str)  {    int hash = 1315423911;    for(int i = 0; i < str.length(); i++)    {      hash ^= ((hash << 5) + str.charAt(i) + (hash >> 2));    }    return (hash & 0x7FFFFFFF);  }      public static int PJWHash(String str)  {    int BitsInUnsignedInt = 32;    int ThreeQuarters   = (BitsInUnsignedInt * 3) / 4;    int OneEighth     = BitsInUnsignedInt / 8;    int HighBits     = 0xFFFFFFFF << (BitsInUnsignedInt - OneEighth);    int hash       = 0;    int test       = 0;    for(int i = 0; i < str.length();i++)    {      hash = (hash << OneEighth) + str.charAt(i);      if((test = hash & HighBits) != 0)      {        hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits));      }    }    return (hash & 0x7FFFFFFF);  }      public static int ELFHash(String str)  {    int hash = 0;    int x  = 0;    for(int i = 0; i < str.length(); i++)    {      hash = (hash << 4) + str.charAt(i);      if((x = (int)(hash & 0xF0000000L)) != 0)      {        hash ^= (x >> 24);        hash &= ~x;      }    }    return (hash & 0x7FFFFFFF);  }      public static int BKDRHash(String str)  {    int seed = 131; // 31 131 1313 13131 131313 etc..    int hash = 0;    for(int i = 0; i < str.length(); i++)    {      hash = (hash * seed) + str.charAt(i);    }    return (hash & 0x7FFFFFFF);  }      public static int SDBMHash(String str)  {    int hash = 0;    for(int i = 0; i < str.length(); i++)    {      hash = str.charAt(i) + (hash << 6) + (hash << 16) - hash;    }    return (hash & 0x7FFFFFFF);  }      public static int DJBHash(String str)  {    int hash = 5381;    for(int i = 0; i < str.length(); i++)    {      hash = ((hash << 5) + hash) + str.charAt(i);    }    return (hash & 0x7FFFFFFF);  }      public static int DEKHash(String str)  {    int hash = str.length();    for(int i = 0; i < str.length(); i++)    {      hash = ((hash << 5) ^ (hash >> 27)) ^ str.charAt(i);    }    return (hash & 0x7FFFFFFF);  }      public static int APHash(String str)  {    int hash = 0;    for(int i = 0; i < str.length(); i++)    {      hash ^= ((i & 1) == 0) ? ( (hash << 7) ^ str.charAt(i) ^ (hash >> 3)) :    (~((hash << 11) ^ str.charAt(i) ^ (hash >> 5)));    }    //    return (hash & 0x7FFFFFFF);    return hash;  }      public static int java(String str)  {    int h = 0;    int off = 0;    int len = str.length();    for (int i = 0; i < len; i++)    {      h = 31 * h + str.charAt(off++);    }    return h;  }    public static long mixHash(String str)  {    long hash = str.hashCode();    hash <<= 32;    hash |= FNVHash2(str);    return hash;  }}

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 资料下载
  • 历年真题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯