java Hash算法大全.docx
- 文档编号:23171715
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:11
- 大小:16.01KB
java Hash算法大全.docx
《java Hash算法大全.docx》由会员分享,可在线阅读,更多相关《java Hash算法大全.docx(11页珍藏版)》请在冰豆网上搜索。
javaHash算法大全
javaHash算法大全
Java代码
/**
*Hash算法大全
*推荐使用FNV1算法
*@algorithmNone
*@authorGoodzzp2006-11-20
*@lastEditGoodzzp2006-11-20
*@editDetailCreate
*/
publicclassHashAlgorithms
{
/**//**
*加法hash
*@paramkey字符串
*@paramprime一个质数
*@returnhash结果
*/
publicstaticintadditiveHash(Stringkey,intprime)
{
inthash,i;
for(hash=key.length(),i=0;i hash+=key.charAt(i); return(hash%prime); } /**//** *旋转hash *@paramkey输入字符串 *@paramprime质数 *@returnhash值 */ publicstaticintrotatingHash(Stringkey,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(Stringkey) { 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'shash *@paramkey输入字节数组 *@paramlevel初始hash常量 *@return结果hash */ publicstaticintbernstein(Stringkey) { inthash=0; inti; for(i=0;i returnhash; } // /**/////Pearson'sHash //charpearson(char[]key,ub4len,chartab[256]) //{ //charhash; //ub4i; //for(hash=len,i=0;i //hash=tab[hash^key[i]]; //return(hash); //} /**/////CRCHashing,计算crc,具体代码见其他 //ub4crc(char*key,ub4len,ub4mask,ub4tab[256]) //{ //ub4hash,i; //for(hash=len,i=0;i //hash=(hash>>8)^tab[(hash&0xff)^key[i]]; //return(hash&mask); //} /**//** *UniversalHashing */ publicstaticintuniversal(char[]key,intmask,int[]tab) { inthash=key.length,i,len=key.length; for(i=0;i<(len<<3);i+=8) { chark=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); } /**//** *ZobristHashing */ publicstaticintzobrist(char[]key,intmask,int[][]tab) { inthash,i; for(hash=key.length,i=0;i hash^=tab[i][key[i]]; return(hash&mask); } //LOOKUP3 //见BobJenkins(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(Stringdata) { 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; } /**//** *ThomasWang的算法,整数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(Stringstr) { intb=378551; inta=63689; inthash=0; for(inti=0;i { hash=hash*a+str.charAt(i); a=a*b; } return(hash&0x7FFFFFFF); } /**//*EndOfRSHashFunction*/ /**//** *JS算法 */ publicstaticintJSHash(Stringstr) { inthash=1315423911; for(inti=0;i { hash^=((hash<<5)+str.charAt(i)+(hash>>2)); } return(hash&0x7FFFFFFF); } /**//*EndOfJSHashFunction*/ /**//** *PJW算法 */ publicstaticintPJWHash(Stringstr) { intBitsInUnsignedInt=32; intThreeQuarters=(BitsInUnsignedInt*3)/4; intOneEighth=BitsInUnsignedInt/8; intHighBits=0xFFFFFFFF<<(BitsInUnsignedInt-OneEighth); inthash=0; inttest=0; for(inti=0;i { hash=(hash< if((test=hash&HighBits)! =0) { hash=((hash^(test>>ThreeQuarters))&(~HighBits)); } } return(hash&0x7FFFFFFF); } /**//*EndOfP.J.WeinbergerHashFunction*/ /**//** *ELF算法 */ publicstaticintELFHash(Stringstr) { 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); } /**//*EndOfELFHashFunction*/ /**//** *BKDR算法 */ publicstaticintBKDRHash(Stringstr) { intseed=131;//31131131313131131313etc.. inthash=0; for(inti=0;i { hash=(hash*seed)+str.charAt(i); } return(hash&0x7FFFFFFF); } /**//*EndOfBKDRHashFunction*/ /**//** *SDBM算法 */ publicstaticintSDBMHash(Stringstr) { inthash=0; for(inti=0;i { hash=str.charAt(i)+(hash<<6)+(hash<<16)-hash; } return(hash&0x7FFFFFFF); } /**//*EndOfSDBMHashFunction*/ /**//** *DJB算法 */ publicstaticintDJBHash(Stringstr) { inthash=5381; for(inti=0;i { hash=((hash<<5)+hash)+str.charAt(i); } return(hash&0x7FFFFFFF); } /**//*EndOfDJBHashFunction*/ /**//** *DEK算法 */ publicstaticintDEKHash(Stringstr) { inthash=str.length(); for(inti=0;i { hash=((hash<<5)^(hash>>27))^str.charAt(i); } return(hash&0x7FFFFFFF); } /**//*EndOfDEKHashFunction*/ /**//** *AP算法 */ publicstaticintAPHash(Stringstr) { 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; } /**//*EndOfAPHashFunction*/ /**//** *JAVA自己带的算法 */ publicstaticintjava(Stringstr) { inth=0; intoff=0; intlen=str.length(); for(inti=0;i { h=31*h+str.charAt(off++); } returnh; } /**//** *混合hash算法,输出64位的值 */ publicstaticlongmixHash(Stringstr) { longhash=str.hashCode(); hash<<=32; hash|=FNVHash1(str); returnhash; } }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java Hash算法大全 Hash 算法 大全
![提示](https://static.bdocx.com/images/bang_tan.gif)