知识大全 Hash算法大全(java实现)

Posted

篇首语:古之立大事者,不惟有超世之才,亦必有坚忍不拔之志。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Hash算法大全(java实现)相关的知识,希望对你有一定的参考价值。

Hash算法大全(java实现)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  Hash算法有很多很多种类 具体的可以参考之前我写的Hash算法的一些分析 本处给大家提供一个集合了很多使用的Hash算法的类 应该可以满足不少人的需要的 Java代码/*** Hash算法大全<br>* 推荐使用FNV 算法* @algorithm None* @author Goodzzp * @lastEdit Goodzzp * @editDetail Create*/public class HashAlgorithms/*** 加法hash* @param key 字符串* @param prime 一个质数* @return hash结果*/public static int additiveHash(String key int prime)   int hash i;   for (hash = key length() i = ; i < key length(); i++)    hash += key charAt(i);   return (hash % prime);

  /*** 旋转hash* @param key 输入字符串* @param prime 质数* @return hash值*/public static int rotatingHash(String key int prime)   int hash i;   for (hash=key length() i= ; i<key length(); ++i)     hash = (hash<< )^(hash>> )^key charAt(i);   return (hash % prime);//   return (hash ^ (hash>> ) ^ (hash>> ));

  // 替代 // 使用 hash = (hash ^ (hash>> ) ^ (hash>> )) & mask;// 替代 hash %= prime;

  /*** MASK值 随便找一个值 最好是质数*/static int M_MASK = x fed ;/*** 一次一个hash* @param key 输入字符串* @return 输出hash值*/public static int oneByOneHash(String key)   int   hash i;   for (hash= i= ; i<key length(); ++i)        hash += key charAt(i);     hash += (hash << );     hash ^= (hash >> );      hash += (hash << );   hash ^= (hash >> );   hash += (hash << );//   return (hash & M_MASK);   return hash;

  /*** Bernstein s hash* @param key 输入字节数组* @param level 初始hash常量* @return 结果hash*/public static int bernstein(String key)   int hash = ;   int i;   for (i= ; i<key length(); ++i) hash = *hash + key charAt(i);   return hash;

  ////// Pearson s Hash// char pearson(char[]key ub len char tab[ ])// //   char hash;//   ub i;//   for (hash=len i= ; i<len; ++i)//     hash=tab[hash^key[i]];//   return (hash);//

  //// CRC Hashing 计算crc 具体代码见其他// ub crc(char *key ub len ub mask ub tab[ ])// //   ub hash i;//   for (hash=len i= ; i<len; ++i)//     hash = (hash >> ) ^ tab[(hash & xff) ^ key[i]];//   return (hash & mask);//

  /*** Universal Hashing*/public static int universal(char[]key int mask int[] tab)   int hash = key length i len = key length;   for (i= ; i<(len<< ); i+= )        char k = key[i>> ];     if ((k& x ) == ) hash ^= tab[i+ ];     if ((k& x ) == ) hash ^= tab[i+ ];     if ((k& x ) == ) hash ^= tab[i+ ];     if ((k& x ) == ) hash ^= tab[i+ ];     if ((k& x ) == ) hash ^= tab[i+ ];     if ((k& x ) == ) hash ^= tab[i+ ];     if ((k& x ) == ) hash ^= tab[i+ ];     if ((k& x ) == ) hash ^= tab[i+ ];      return (hash & mask);

  /*** Zobrist Hashing*/public static int zobrist( char[] key int mask int[][] tab)   int hash i;   for (hash=key length i= ; i<key length; ++i)     hash ^= tab[i][key[i]];   return (hash & mask);

  // LOOKUP // 见Bob Jenkins( ) c文件

  // 位FNV算法static int M_SHIFT = ;/*** 位的FNV算法* @param data 数组* @return int值*/    public static int FNVHash(byte[] data)            int hash = (int) L;        for(byte b : data)            hash = (hash * ) ^ b;        if (M_SHIFT == )            return hash;        return (hash ^ (hash >> M_SHIFT)) & M_MASK;        /**     * 改进的 位FNV算法      * @param data 数组     * @return int值     */    public static int FNVHash (byte[] data)            final int p = ;        int hash = (int) L;        for(byte b:data)            hash = (hash ^ b) * p;        hash += hash << ;        hash ^= hash >> ;        hash += hash << ;        hash ^= hash >> ;        hash += hash << ;        return hash;        /**     * 改进的 位FNV算法      * @param data 字符串     * @return int值     */    public static int FNVHash (String data)            final int p = ;        int hash = (int) L;        for(int i= ;i<data length();i++)            hash = (hash ^ data charAt(i)) * p;        hash += hash << ;        hash ^= hash >> ;        hash += hash << ;        hash ^= hash >> ;        hash += hash << ;        return hash;   

  [NextPage]

  /**     * Thomas Wang的算法 整数hash     */    public static int intHash(int key)          key += ~(key << );      key ^= (key >>> );      key += (key << );      key ^= (key >>> );      key += ~(key << );      key ^= (key >>> );      return key;        /**     * RS算法hash     * @param str 字符串     */    public static int RSHash(String str)            int b    = ;        int a    = ;        int hash = ;

  for(int i = ; i < str length(); i++)                 hash = hash * a + str charAt(i);          a    = a * b;      

  return (hash & x FFFFFFF);        /* End Of RS Hash Function */

  /**     * JS算法     */    public static int JSHash(String str)           int hash = ;

  for(int i = ; i < str length(); i++)                 hash ^= ((hash << ) + str charAt(i) + (hash >> ));      

  return (hash & x FFFFFFF);        /* End Of JS Hash Function */

  /**     * PJW算法     */    public static int PJWHash(String str)            int BitsInUnsignedInt = ;        int ThreeQuarters     = (BitsInUnsignedInt * ) / ;        int OneEighth         = BitsInUnsignedInt / ;        int HighBits          = xFFFFFFFF << (BitsInUnsignedInt OneEighth);        int hash              = ;        int test              = ;

  for(int i = ; i < str length();i++)                 hash = (hash << OneEighth) + str charAt(i);

  if((test = hash & HighBits) != )                       hash = (( hash ^ (test >> ThreeQuarters)) & (~HighBits));                

  return (hash & x FFFFFFF);        /* End Of P J Weinberger Hash Function */

  /**     * ELF算法     */    public static int ELFHash(String str)            int hash = ;        int x    = ;

  for(int i = ; i < str length(); i++)                 hash = (hash << ) + str charAt(i);          if((x = (int)(hash & xF L)) != )                       hash ^= (x >> );             hash &= ~x;                

  return (hash & x FFFFFFF);        /* End Of ELF Hash Function */

  /**     * BKDR算法     */    public static int BKDRHash(String str)            int seed = ; // etc         int hash = ;

  for(int i = ; i < str length(); i++)                 hash = (hash * seed) + str charAt(i);      

  return (hash & x FFFFFFF);        /* End Of BKDR Hash Function */

  /**     * SDBM算法     */    public static int SDBMHash(String str)            int hash = ;

  for(int i = ; i < str length(); i++)                 hash = str charAt(i) + (hash << ) + (hash << ) hash;      

  return (hash & x FFFFFFF);        /* End Of SDBM Hash Function */

  /**     * DJB算法     */    public static int DJBHash(String str)           int hash = ;

  for(int i = ; i < str length(); i++)                 hash = ((hash << ) + hash) + str charAt(i);      

  return (hash & x FFFFFFF);        /* End Of DJB Hash Function */

  /**     * DEK算法     */    public static int DEKHash(String str)            int hash = str length();

  for(int i = ; i < str length(); i++)                 hash = ((hash << ) ^ (hash >> )) ^ str charAt(i);      

  return (hash & x FFFFFFF);        /* End Of DEK Hash Function */

  /**     * AP算法     */    public static int APHash(String str)            int hash = ;

  for(int i = ; i < str length(); i++)                 hash ^= ((i & ) == ) ? ( (hash << ) ^ str charAt(i) ^ (hash >> )) :                                   (~((hash << ) ^ str charAt(i) ^ (hash >> )));      

  //       return (hash & x FFFFFFF);       return hash;        /* End Of AP Hash Function */

  /**     * JAVA自己带的算法     */    public static int java(String str)   int h = ;   int off = ;   int len = str length();   for (int i = ; i < len; i++)       h = * h + str charAt(off++);      return h;

cha138/Article/program/Java/hx/201311/25947

相关参考

知识大全 Java实现通用组合算法

Java实现通用组合算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java实现通用组合算法

知识大全 JAVA凸包算法

JAVA凸包算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  源码一JarvisMarchja

知识大全 常见排序算法的java实现

  最近在面试遇到很多排序算法问题总结一下  定义数组如下  [java]  int[]array=newint[];  int[]array=newint[];  首先是插入排序  [java]  

知识大全 HITS算法Java实现

HITS算法Java实现  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  HITS算法是重要的链接

知识大全 JAVA垃圾回收算法摘要

JAVA垃圾回收算法摘要  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  垃圾收集的算法分析  j

知识大全 Java通用权限控制算法

Java通用权限控制算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一种常用的权限控制算法的

知识大全 Java扫雷算法

Java扫雷算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  建立一个雷区可以用一个一个的JB

知识大全 java的各种排序算法

  Java代码  插入排序:    packagerututilalgorithmsupport;  importrututilalgorithmSortUtil;  publicclassInse

知识大全 Java的垃圾回收之算法

Java的垃圾回收之算法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  引言  Java的堆是一

知识大全 Java技术进阶 基于Java的IDEA加密算法探讨

Java技术进阶基于Java的IDEA加密算法探讨  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!