java Hash算法大全.docx

上传人:b****1 文档编号:23171715 上传时间:2023-05-15 格式:DOCX 页数:11 大小:16.01KB
下载 相关 举报
java Hash算法大全.docx_第1页
第1页 / 共11页
java Hash算法大全.docx_第2页
第2页 / 共11页
java Hash算法大全.docx_第3页
第3页 / 共11页
java Hash算法大全.docx_第4页
第4页 / 共11页
java Hash算法大全.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

java Hash算法大全.docx

《java Hash算法大全.docx》由会员分享,可在线阅读,更多相关《java Hash算法大全.docx(11页珍藏版)》请在冰豆网上搜索。

java Hash算法大全.docx

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;

}

}

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1