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

news/2024/9/13 9:17:09

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;

}

}


http://www.niftyadmin.cn/n/2776855.html

相关文章

MyBatis事务隔离级别

一般数据库的隔离级别有4个&#xff0c;由低到高依次为Read uncommitted、Read committed、Repeatable read、Serializable&#xff0c;这四个级别可以逐个解决脏读、不可重复读、幻读这几类问题。 √: 可能出现 : 不会出现 脏读 不可重复读 幻读 说明Read uncommitted √ √…

java json和map相互转化

2019独角兽企业重金招聘Python工程师标准>>> java使用json要导入如下这些包&#xff1a; commons-beanutils-1.7.0.jar commons-lang-2.1.jar ezmorph-1.0.2.jar json-lib-1.1-jdk15.jar commons-logging-1.0.4.jar commons-collections.jar commons-collections…

获取Executor提交的并发执行的任务返回结果的两种方式/ExecutorCompletionService使用

当我们通过Executor提交一组并发执行的任务&#xff0c;并且希望在每一个任务完成后能立即得到结果&#xff0c;有两种方式可以采取&#xff1a; 方式一&#xff1a; 通过一个list来保存一组future&#xff0c;然后在循环中轮训这组future,直到每个future都已完成。如果我们不希…

java timertask 定时_java任务调度之Timer定时器

定时器相信大家都不陌生&#xff0c;平时使用定时器就像使用闹钟一样&#xff0c;我们可以在固定的时间做某件事&#xff0c;也可以在固定的时间段重复做某件事&#xff0c;今天就来分析一下java中自带的定时任务器Timer。一、Timer基本使用在Java中为我们提供了Timer来实现定时…

Spring源码分析之一:spring容器启动以及获取Bean实例所做的事

一般手动启动spring容器和获取Bean实例我们会写如下代码&#xff1a; BeanFactory bf new XmlBeanFactory(new ClassPathResource("testBean.xml",getClass())); MyTestBean bean (MyTestBean) bf.getBean("myTestBean"); 或者是 ApplicationContext…

java web 加载dll_JavaWeb项目中dll文件动态加载方法解析(详细步骤)

相信很多做Java的朋友都有过用Java调用JNI实现调用C或C方法的经历&#xff0c;那么Java Web中又如何实现DLL/SO文件的动态加载方法呢。今天就给大家带来一篇JAVA Web项目中DLL/SO文件动态加载方法的文章。在Java Web项目中&#xff0c;我们经常会用到通过JNI调用dll动态库文件来…

java hashtable 删除_如何在Java中删除HashTable中的节点?

我是个编程新手。我目前正在学习Java编程语言。我的问题是,我试图删除一个包含HashTable中某个值的特定节点,但是我不知道我哪里出错了。有人能解释一下如何删除这个特定的节点吗?提前谢谢你。对不起,我的英语不好。“艾伯特”和应该删除。这是我的代码:班级:public class Has…

hadoop java api下载文件_使用java api操作Hadoop文件

1. 概述2. 文件操作2.1 上传本地文件到hadoop fs2.2 在hadoop fs中新建文件&#xff0c;并写入2.3 删除hadoop fs上的文件2.4 读取文件3. 目录操作3.1 在hadoop fs上创建目录3.2 删除目录3.3 读取某个目录下的所有文件4. 参考资料接代码下载<1>. 概述hadoop中关于文件操…