javascript中有需要用到像类似java中的hashcode方法,想把java中的hashcode方法直接搬到js中发现不行
/**
* Returns a hash code for this string. The hash code for a
* <code>String</code> object is computed as
* <blockquote><pre>
* s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
* </pre></blockquote>
* using <code>int</code> arithmetic, where <code>s[i]</code> is the
* <i>i</i>th character of the string, <code>n</code> is the length of
* the string, and <code>^</code> indicates exponentiation.
* (The hash value of the empty string is zero.)
*
* @return a hash code value for this object.
*/
public int hashCode() {
int h = hash;
int len = count;
if (h == 0 && len > 0) {
int off = offset;
char val[] = value;
for (int i = 0; i < len; i++) {
h = 31*h + val[off++];
}
hash = h;
}
return h;
}
关键是hash的类型是int,int的范围是MIN_VALUE = 0x80000000; MAX_VALUE = 0x7fffffff;
这样在执行
h = 31*h + val[off++];
的时候当超有可能超过int的最大值,变成负数。但js里面是不区分int,long的直接显示,显示不下用科学技术法,所以需要一个模拟java中int超出范围变负数的方法。
最终的实现如下:
function isNull(str){
return str == null || str.value == "";
}
/**
* java String hashCode 的实现
* @param strKey
* @return intValue
*/
function hashCode(strKey)
{
var hash = 0;
if(!isNull(strKey))
{
for (var i = 0; i < strKey.length; i++)
{
hash = hash * 31 + strKey.charCodeAt(i);
hash = intValue(hash);
}
}
return hash;
}
/**
* 将js页面的number类型转换为java的int类型
* @param num
* @return intValue
*/
function intValue(num)
{
var MAX_VALUE = 0x7fffffff;
var MIN_VALUE = -0x80000000;
if(num > MAX_VALUE || num < MIN_VALUE)
{
return num &= 0xFFFFFFFF;
}
return num;
}
分享到:
相关推荐
从给定文件中,我们可以提取以下知识点: ...通过以上知识点的详细说明,我们可以更深入地理解如何在JavaScript中实现一个与Java中实现兼容的hashCode算法,并且理解这个算法在实际应用中的价值和潜在的性能优化考虑。
哈希生成器js 一个Vue.js应用程序,其中包含Java中String类的hashCode方法的javascript实现构建设置# install dependenciesnpm install# serve with hot reload at localhost:8080npm run dev# build for production...
安装npm install string-hashcode 例子var hashCode = require ( 'string-hashcode' ) ;var s = 'abc' ;console . log ( s . hashCode ) ; // undefinedvar code = hashCode ( s ) ;console . log ( s . hashCode ) ...
这意味着在JavaScript脚本中可以调用Java对象的方法,以及在Java程序中可以执行JavaScript函数,并获取其返回值。 使用JavaScript脚本在Java中的基本步骤可以概括如下: 1. 编写JavaScript脚本:首先,需要编写...
JAVA 中有许多常用的类,每个类都有其特定的方法,本文将对 java.lang.Object 类、String 类和 StringBuffer 类的常用方法进行讲解。 一、java.lang.Object类 java.lang.Object 类是 JAVA 中所有类的父类,它提供...
Java API中的核心类如`Object`、`String`、`Integer`等是所有Java类的基类,它们定义了一些基本的操作,如`equals()`用于比较对象是否相等,`toString()`用于将对象转化为字符串,以及`hashCode()`用于实现哈希表的...
- 值传递与引用传递的区别:Java中方法参数的传递总是值传递,引用类型的值是对象引用的拷贝。 4. Java集合框架 - ArrayList与数组的区别:ArrayList是动态数组实现,大小可变;数组大小固定。 - 大O符号:表示...
与Java的String#hashCode()类似。 安装$ npm install @ sindresorhus / string-hash用法const stringHash string-hash获取字符串的哈希值使用非加密哈希函数FNV-1a。 与Java的String#hashCode()类似。 安装$ ...
最后,`ObjectUtil`工具类通常包含一些通用的面向对象的辅助方法,例如,`equals()`和`hashCode()`的实现可以帮助我们快速比较两个对象是否相等,`clone()`可以实现对象的浅拷贝或深拷贝,`isNull()`和`isNotNull()`...
Java中的Object类是所有类的根类,覆盖了equals(), hashCode(), toString()等方法,为Java对象提供了通用的行为。static关键字和final关键字也是Java面向对象编程中的重要概念,分别用于定义类变量和常量。 集合...
Java中实现多态的机制是通过继承和接口实现,一个类被声明为final类型,表示该类不能被继承。 ArrayList和Vector都是实现了List接口的集合类,但Vector是同步的,而ArrayList不是。关于使用assert的时机,它主要...
在Java中,当你重写`equals()`方法时,通常也需要重写`hashCode()`。这是因为`hashCode()`用于哈希表(如`HashMap`)的高效查找。当两个对象通过`equals()`比较相等时,它们的`hashCode()`也应该相等,以确保正确地...
2. **如何在java中实现文本文件和二进制文件的copy?** - 对于文本文件,可以使用`BufferedReader`和`BufferedWriter`;对于二进制文件,可以使用`FileInputStream`和`FileOutputStream`。 #### 八、JDBC 1. **...
1. 作用域:在Java中,public、private、protected和默认的作用域分别代表了不同的访问级别。public允许任何地方访问,private仅限于本类内部,protected允许同包及子类访问,而默认作用域(无修饰符)只允许同包内...
Java 项目开发总结是指在 Java 项目开发中所需具备的基本知识点和技能。以下是 Java 项目开发总结的详细知识点: 一、基本语法和数据类型 * int、long、Integer、Long 等基本数据类型 * 操作符、if、else 语句、...
- 多态是通过继承和接口实现的,允许子类重写父类方法,或者实现接口中的方法。 #### 四十一、声明为`final`类型的含义 - `final`关键字用于声明不可变的类、方法或变量。 - `final`类不能被继承,`final`方法不能...
Java中的输入/输出操作通过流实现。理解 File、FileInputStream、FileOutputStream 等基本类对于文件操作非常重要。 **12. Collection & Array** 数组和集合都是用来存储多个元素的数据结构。了解它们之间的区别和...
- **equals方法**:在Object类中,equals默认实现也是基于==运算符来比较引用的,即比较两个引用是否指向同一个对象。但String、Integer等类重写了equals方法,使得它们比较的是值而非引用。因此,对于String和...
- DWR允许JavaScript与Java服务器端进行实时交互,实现AJAX功能。 20. **JSP基础配置** - JSP页面需要引入Servlet API、JSP API等相关jar包。 21. **Hibernate ID生成策略** - Hibernate提供了多种ID生成策略,...
`equals()`是Object类的方法,通常在子类中重写以实现内容的比较,如Integer和String类。 7. **toString()**: - 默认的`toString()`返回对象的内存地址,但通常会重写以返回更有意义的信息,如对象的属性。 8. *...