在java中,一个hashCode算法可以用来计算一个字符串的哈希值。今天一个朋友突然问我是否可以计算hashCode JS,这需要相同的结果作为java hashCode计算。

对于java的hashCode,它还不知道它的算法,直到现在,但是它不应该太难猜。所以现在java写的代码测试。

运行结果:899755

按Ctrl键并点击hashCode方法的名字看算法,并发现它是一个非常简单的代码,如下所示:

复制代码代码如下所示:

public int hashCode(){

散列;

如果(h=0){

整数=偏移量;

char值;

int =计数;

对于(int = i 0;i < i;i + +){

h=31;

}

散列=h;

}

返回H;

}

这很好,只需将过去移植到js中就可以了:

复制代码代码如下所示:



函数hashCode(STR){

var = 0,关闭= 0;

VaR len = str.length;

对于(var i = 0;i < i;i + +){

H = 31×H + str.charcodeat(下+ +);

}

返回H;

}

警报(hashCode('shenyang '));





运行结果:899755

好吧,作为java计算结果相同。我认为这是做的,然后我想找一个系列的测试。

沈阳,沈阳,运行的结果:在java 1062711668,但JS,26832515444。

匡云,这只是一个尝试,是一个问题!思考片刻后,它突然想到在java中的长度是21亿左右,并没有限制在JS。这个问题应该在这里,所以一点小小的改变以前的方法:

复制代码代码如下所示:



函数hashCode(STR){

var = 0,关闭= 0;

VaR len = str.length;

对于(var i = 0;i < i;i + +){

H = 31×H + str.charcodeat(下+ +);

}

var T = 2147483648 * 2;

当(h = 2147483647){

h=T

}

返回H;

}

警报(hashCode('shenyang沈阳啊));



再次测试!好啊!完成 u3002no技术含量,一点总结

2013-02-19更新,上面的效率相对较低,当内容很长,下面的代码优化的代码:

复制代码代码如下所示:



函数hashCode(STR){

var=0;

VaR len = str.length;

var = 2147483648;

对于(var i = 0;i < i;i + +){

H = 31×H + str.charcodeat(我);

如果(H > 2147483647)H = t; / / java整型溢出模型

}

* var = 2147483648 * 2;

当(h = 2147483647){

H = T

}

返回H;

}

警报(hashCode(c #同时n个线程并发执行,其他地方如何在队列实现)); / / 1107373715