`
BruceXX
  • 浏览: 141470 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

js 的 java hashcode算法(更正版)

    博客分类:
  • JS
阅读更多
    function hashCode(str){
        var h = 0, off = 0;
        var len = str.length;

        for(var i = 0; i < len; i++){
            var tmp=str.charCodeAt(off++);
            h = 31 * h  + tmp;
            if(h>0x7fffffff || h<0x80000000){
                h=h & 0xffffffff;
            }
        }
        return h;
    };

        今天写js 的 hashmap 算法,  需要用到java里的hashcode 算法,这是一个native  method,封装在dll 里面了,看不到c 源码,  所以带往上看了一下:发现还是有人研究过的,code 如下:

function hashCode(str){
        var h = 0, off = 0;
        var len = str.length;
        for(var i = 0; i < len; i++){
            h = 31 * h + str.charCodeAt(off++);
        }
    var t=-2147483648*2;
    while(h>2147483647){
      h+=t;
    }
        return h;
    }

 

偶不知道这位仁兄为什么要去减两个单位的2^32,但是这种做法是很不效率的,随便拿了一个字符串"大案要案噶dfi13"试了一下,IE就卡住了,

  我把着个算法转成java的后确是对的,并且把减两个单位的while去掉了,也是对的,

    private static int newHash(String str){

            int h = 0, off = 0;
            int len = str.length();
            for(int i = 0; i < len; i++){
                h = 31 * h + str.charAt(off++);
            }

            return h;
    }

 我马上知道怎么回事了,那个仁兄是想把js 的最后结果换成整型,不过他这么做十分不严谨,

我改了下子,只去低32位就可以了,因为java里有类型自动转换,偶写的也是如此...这下肯定没问题了...

 

    function hashCode(str){
       str=str+"";
        var h = 0, off = 0;
        var len = str.length;
   	
        for(var i = 0; i < len; i++){
            h = 31 * h  + str.charCodeAt(off++);
            if(h>0x7fffffff || h<0x80000000){
                h=h & 0xffffffff;
            }
        }
        return h;
    };

 

 

分享到:
评论
1 楼 rockyuse 2011-11-10  
function strHashCode(str){
var hash = 1,
charCode = 0,
idx;
hash = 0;
for(idx = str.length - 1; idx >= 0; idx--){
charCode = str.charCodeAt(idx);
hash = (hash << 6&268435455) + charCode+(charCode << 14);
charCode = hash&266338304;
hash = charCode != 0 ? hash ^ charCode>>21 : hash;
}
return hash;
}

相关推荐

    javascript中实现兼容JAVA的hashCode算法代码分享

    从给定文件中,我们可以提取以下知识点: ...通过以上知识点的详细说明,我们可以更深入地理解如何在JavaScript中实现一个与Java中实现兼容的hashCode算法,并且理解这个算法在实际应用中的价值和潜在的性能优化考虑。

    javascript的hashCode函数实现代码小结

    在JavaScript中,`hashCode`函数的实现可以从Java的`hashCode()`方法中获取灵感,因为Java的实现是经过优化的,并且广泛应用于各种场景。 下面我们将详细讨论几种不同的`hashCode`实现方法: 1. **基础实现**: `...

    【牛客网】Java开发校招面试考点汇总(附面试题和答案).pdf

    - Java和JavaScript的区别:Java是一种静态类型语言,而JavaScript是动态类型语言;Java运行在虚拟机上,JavaScript通常在浏览器中运行。 - Java和PHP的区别:Java是一种面向对象的、跨平台的编程语言,而PHP是一...

    Java课程介绍.pdf

    Java中的Object类是所有类的根类,覆盖了equals(), hashCode(), toString()等方法,为Java对象提供了通用的行为。static关键字和final关键字也是Java面向对象编程中的重要概念,分别用于定义类变量和常量。 集合...

    java复习题总结.docx

    在Java中,当你重写`equals()`方法时,通常也需要重写`hashCode()`。这是因为`hashCode()`用于哈希表(如`HashMap`)的高效查找。当两个对象通过`equals()`比较相等时,它们的`hashCode()`也应该相等,以确保正确地...

    3年java面试经验

    **Hashcode/Hash算法**:理解哈希码的作用及其与对象相等性的关系。哈希算法在数据结构如HashMap中非常重要。 **Linux安装Tomcat等应用**:熟悉在Linux环境下安装部署服务器环境的过程。 **Maven/SVN**:了解这两...

    在Java中运用Hashtable.doc

    在Java编程中,`Hashtable`是一个古老的容器类,属于`java.util`包,它提供了存储键值对(key-value pairs)的功能。哈希表(Hashtable)是一种数据结构,通过键来快速查找对应的值,它的核心原理是哈希算法。哈希...

    最新Java百度社招带答案面经.doc

    根据提供的文档信息,以下是从标题、描述、标签和部分内容中...以上知识点涵盖了Java面试中常见的技术领域,包括但不限于项目经验分享、基本语法、数据结构与算法、多线程编程等方面,对求职者来说具有较高的参考价值。

    java开发常用的jar包的作用解释.pdf

    它还包含一个可继承的 enum 类型、对多种嵌套的 Exception 类型的支持、对 java.util.Date 的增强以及用于构建方法的实用程序,例如自动生成 toString() 的结果、自动实现 hashCode() 和 equals() 方法、数组操作、...

    java编程语言的知识结构_副本_76941.pdf

    3. **面向对象**:Java是面向对象的语言,包括类和对象的创建与销毁,equals()和hashCode()方法用于对象比较,以及枚举类型(enum)和接口的使用。枚举可以定义一组固定的常量,接口则用于定义规范,实现多态性。 4...

    海联讯科技Java面试题.doc

    - DWR允许JavaScript与Java服务器端进行实时交互,实现AJAX功能。 20. **JSP基础配置** - JSP页面需要引入Servlet API、JSP API等相关jar包。 21. **Hibernate ID生成策略** - Hibernate提供了多种ID生成策略,...

    Java常见笔试、面试题目深度剖析

    Java作为一门广泛使用的编程语言,其笔试和面试题目往往涵盖了语法、面向对象设计、数据结构、算法、并发编程等多个方面。以下是对这些知识点的详细解析: 1. **基础语法** - **变量与数据类型**:Java有基本数据...

    java 面试宝典 免费提供

    - Java接口更倾向于功能的组合,而C++虚类强调的是继承层次结构。 #### 三十六、`.java`文件与类 - 一个`.java`文件可以包含多个类,但只能有一个公共类,并且文件名需要与该公共类的名称一致。 #### 三十七、常用...

    千方百计的面试题

    面向对象编程是Java语言的核心,其主要特征...最后,java和javascript虽然名字相似,但它们是完全不同的编程语言,一个用于后端开发,一个用于前端开发。在合适的地方使用assert来验证程序的正确性是一种好的编程实践。

    Java面试题和答案.pdf

    ### Java高频面试知识点详解 #### 一、Java基础 **1. JDK和JRE有什么区别?** - **JRE(Java Runtime Environment)**: 包含Java虚拟机(JVM)、Java核心类库和支持文件,是运行Java程序所需的基础环境。 - **JDK...

    java面试问题汇总(非常全面)

    ### Java面试问题汇总知识点 #### 1. Forward与Redirect的区别 - **Forward**:服务器端重定向,由服务器控制将请求转发到另一个资源。客户端浏览器地址栏不会改变,且只发送一次请求。这种方式效率较高,因为可以...

Global site tag (gtag.js) - Google Analytics