javascript中实现兼容JAVA的hashCode算法代码分享_基础知识

WBOY
Release: 2016-05-16 16:39:36
Original
1925 people have browsed it

在java中一个hashCode算法,可以用来计算一个字符串的hash值,今天一个朋友突然问俺能不能在js中计算hashCode,要求和java的hashCode计算结果一样。

对于java的hashCode,以前到现在也一直没有了解过其算法,不过猜想应该也不会太难,于是现在java中写了这段代码进行测试:
运行结果:899755

按下Ctrl键点击hashCode方法名跟进去看了下其算法,发现是很简单的几句代码,如下所示:

复制代码代码如下:

public int hashCode() {
int h = hash;
if (h == 0) {
int off = offset;
char val[] = value;
int len = count;

for (int i = 0; i h = 31*h + val[off++];
}
hash = h;
}
return h;
}

这下好,简单移植过去到js里就应该ok了。于是写出如下JS代码:

复制代码代码如下:



运行结果:899755

OK,与java计算结果一样。本以为这么就搞定了,然后想着再随便找个串测试下:

“沈阳沈阳啊”,在JAVA中运行结果为:1062711668,然而到js中成了:26832515444。

狂晕,这随便一试就有问题了!后思考片刻,突然想到Java中int长度好像是21亿左右,js中就没这限制了。问题应该就是在这里了,于是对之前的方法做了一点改造:

复制代码代码如下:


再次测试!OK!大功告成。没有什么技术含量,一点小总结
2013-02-19更新,上面那个效率比较低下,当内容很长的时候会当掉,下面的代码是优化后的代码:

复制代码代码如下:


Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!