java字符串hash算法_Hash算法大全(java实现)

packagecom.conan;/*** Hash算法大全

* 推荐使用FNV1算法

*

* @algorithm None

*@authorGoodzzp 2006-11-20

* @lastEdit Goodzzp 2006-11-20

* @editDetail Create*/publicclassHashAlgorithms {/*** 加法hash

*

*@paramkey

*            字符串

*@paramprime

*            一个质数

*@returnhash结果*/publicstaticintadditiveHash(String key,intprime) {inthash, i;for(hash=key.length(), i=0; i

hash+=key.charAt(i);return(hash%prime);

}/*** 旋转hash

*

*@paramkey

*            输入字符串

*@paramprime

*            质数

*@returnhash值*/publicstaticintrotatingHash(String key,intprime) {inthash, i;for(hash=key.length(), i=0; 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;/*** MASK值,随便找一个值,最好是质数*/staticintM_MASK=0x8765fed1;/*** 一次一个hash

*

*@paramkey

*            输入字符串

*@return输出hash值*/publicstaticintoneByOneHash(String key) {inthash, i;for(hash=0, i=0; i

hash+=key.charAt(i);

hash+=(hash<<10);

hash^=(hash>>6);

}

hash+=(hash<<3);

hash^=(hash>>11);

hash+=(hash<<15);//return (hash & M_MASK);returnhash;

}/*** Bernstein's hash

*

*@paramkey

*            输入字节数组

*@paramlevel

*            初始hash常量

*@return结果hash*/publicstaticintbernstein(String key) {inthash=0;inti;for(i=0; i

hash=33*hash+key.charAt(i);returnhash;

}//Pearson's Hash//char pearson(char[]key, ub4 len, char tab[256])//{//char hash;//ub4 i;//for (hash=len, i=0; i> 8) ^ tab[(hash & 0xff) ^ key[i]];//return (hash & mask);//}/*** Universal Hashing*/publicstaticintuniversal(char[] key,intmask,int[] tab) {inthash=key.length, i, len=key.length;for(i=0; 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);

}/*** Zobrist Hashing*/publicstaticintzobrist(char[] key,intmask,int[][] tab) {inthash, i;for(hash=key.length, i=0; i

hash^=tab[i][key[i]];return(hash&mask);

}//LOOKUP3//见Bob Jenkins(3).c文件//32位FNV算法staticintM_SHIFT=0;/*** 32位的FNV算法

*

*@paramdata

*            数组

*@returnint值*/publicstaticintFNVHash(byte[] data) {inthash=(int)2166136261L;for(byteb : data)

hash=(hash*16777619)^b;if(M_SHIFT==0)returnhash;return(hash^(hash>>M_SHIFT))&M_MASK;

}/*** 改进的32位FNV算法1

*

*@paramdata

*            数组

*@returnint值*/publicstaticintFNVHash1(byte[] data) {finalintp=16777619;inthash=(int)2166136261L;for(byteb : data)

hash=(hash^b)*p;

hash+=hash<<13;

hash^=hash>>7;

hash+=hash<<3;

hash^=hash>>17;

hash+=hash<<5;returnhash;

}/*** 改进的32位FNV算法1

*

*@paramdata

*            字符串

*@returnint值*/publicstaticintFNVHash1(String data) {finalintp=16777619;inthash=(int)2166136261L;for(inti=0; i

hash=(hash^data.charAt(i))*p;

hash+=hash<<13;

hash^=hash>>7;

hash+=hash<<3;

hash^=hash>>17;

hash+=hash<<5;returnhash;

}/*** Thomas Wang的算法,整数hash*/publicstaticintintHash(intkey) {

key+=~(key<<15);

key^=(key>>>10);

key+=(key<<3);

key^=(key>>>6);

key+=~(key<<11);

key^=(key>>>16);returnkey;

}/*** RS算法hash

*

*@paramstr

*            字符串*/publicstaticintRSHash(String str) {intb=378551;inta=63689;inthash=0;for(inti=0; i

hash=hash*a+str.charAt(i);

a=a*b;

}return(hash&0x7FFFFFFF);

}/*End Of RS Hash Function*//*** JS算法*/publicstaticintJSHash(String str) {inthash=1315423911;for(inti=0; i

hash^=((hash<<5)+str.charAt(i)+(hash>>2));

}return(hash&0x7FFFFFFF);

}/*End Of JS Hash Function*//*** PJW算法*/publicstaticintPJWHash(String str) {intBitsInUnsignedInt=32;intThreeQuarters=(BitsInUnsignedInt*3)/4;intOneEighth=BitsInUnsignedInt/8;intHighBits=0xFFFFFFFF<

hash=(hash<

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

}

}return(hash&0x7FFFFFFF);

}/*End Of P. J. Weinberger Hash Function*//*** ELF算法*/publicstaticintELFHash(String str) {inthash=0;intx=0;for(inti=0; i

hash=(hash<<4)+str.charAt(i);if((x=(int) (hash&0xF0000000L))!=0) {

hash^=(x>>24);

hash&=~x;

}

}return(hash&0x7FFFFFFF);

}/*End Of ELF Hash Function*//*** BKDR算法*/publicstaticintBKDRHash(String str) {intseed=131;//31 131 1313 13131 131313 etc..inthash=0;for(inti=0; i

hash=(hash*seed)+str.charAt(i);

}return(hash&0x7FFFFFFF);

}/*End Of BKDR Hash Function*//*** SDBM算法*/publicstaticintSDBMHash(String str) {inthash=0;for(inti=0; i

hash=str.charAt(i)+(hash<<6)+(hash<<16)-hash;

}return(hash&0x7FFFFFFF);

}/*End Of SDBM Hash Function*//*** DJB算法*/publicstaticintDJBHash(String str) {inthash=5381;for(inti=0; i

hash=((hash<<5)+hash)+str.charAt(i);

}return(hash&0x7FFFFFFF);

}/*End Of DJB Hash Function*//*** DEK算法*/publicstaticintDEKHash(String str) {inthash=str.length();for(inti=0; i

hash=((hash<<5)^(hash>>27))^str.charAt(i);

}return(hash&0x7FFFFFFF);

}/*End Of DEK Hash Function*//*** AP算法*/publicstaticintAPHash(String str) {inthash=0;for(inti=0; i

hash^=((i&1)==0)?((hash<<7)^str.charAt(i)^(hash>>3))

: (~((hash<<11)^str.charAt(i)^(hash>>5)));

}//return (hash & 0x7FFFFFFF);returnhash;

}/*End Of AP Hash Function*//*** JAVA自己带的算法*/publicstaticintjava(String str) {inth=0;intoff=0;intlen=str.length();for(inti=0; i

h=31*h+str.charAt(off++);

}returnh;

}/*** 混合hash算法,输出64位的值*/publicstaticlongmixHash(String str) {longhash=str.hashCode();

hash<<=32;

hash|=FNVHash1(str);returnhash;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值