`
TimerBin
  • 浏览: 355182 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

String源码中hashCode算法

    博客分类:
  • JAVA
阅读更多

针对java中String源码hashcode算法源码分析

 

/** The value is used for character storage. */
private final char value[];  //将字符串截成的字符数组

/** Cache the hash code for the string */
private int hash; // Default to 0 用以缓存计算出的hashcode值

/**
  * 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;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

 按照上面源码举例说明:

 

String msg = "abcd";  // 此时value[] = {'a','b','c','d'}  因此

for循环会执行4次

第一次:h = 31*0 + a = 97 

第二次:h = 31*97 + b = 3105 

第三次:h = 31*3105 + c = 96354 

第四次:h = 31*96354 + d = 2987074 

由以上代码计算可以算出 msg 的hashcode = 2987074  刚好与 System.err.println(new String("abcd").hashCode()); 进行验证

 

在源码的hashcode的注释中还提供了一个多项式计算方式:

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]      

s[0] :表示字符串中指定下标的字符

n:表示字符串中字符长度

a*31^3 + b*31^2 + c*31^1 + d = 2987074  + 94178 + 3069 + 100 = 2987074 ;

 

 

 

 

分享到:
评论

相关推荐

    HashMap模块源码—— 高效随机存取数据结构 ,文本索引必备

    哈希函数用的是java中String.hashCode()算法(经实际验证其碰撞率极低且相近的文本散列值相邻,存取的效率更高.)。可自动无限增加容量(内存允许)。3、连续10万次不同内容存取效率为,存10万次共耗时约280ms ,取10万次...

    易语言-HashMap模块源码—— 高效随机存取数据结构 ,文本索引必备

    哈希函数用的是java中String.hashCode()算法(经实际验证其碰撞率极低且相近的文本散列值相邻,存取的效率更高.) 可自动无限增加容量(内存允许) 3、连续10万次不同内容存取效率为,存10万次共耗时约280ms ,取10万次共...

    毕业设计电商网站源码-Snailclimb:蜗牛爬

    毕业设计电商网站源码 推荐几个比较实用的服务:1. (企业官网、电商网站,多种可供选择模板,代金券免费领取)、2. 、3. Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础 Java 集合框架 Java 多...

    疯狂的java讲义项目源码-java-graph-algorithms:BFS、Dijkstra、EdmondKarp、FloydWarsha

    疯狂的java讲义项目源码具有可视化的 Java 图形算法实现并与 JUNG Graph Lib 进行比较 该项目是在第三学期 B.Sc 实践任务中的结果。 应用信息科学“图论概念与算法”课程。 由于本次讲座是在德国大学进行的,因此...

    毕业设计电商网站源码-JAVA-:JAVA-

    毕业设计电商网站源码 推荐几个比较实用的阿里云服务,按需选择:1. 、2. 、3. 、4. (企业官网、电商网站,多种可供选择模板,代金券免费领取) Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础...

    java8源码-java-start::seedling::seedling::seedling:学习Java语法过程中的一些案例

    源码 目录 Java 基础 容器 并发 JVM I/O Java 8 编程规范 网络 操作系统 Linux相关 数据结构与算法 数据结构 算法 数据库 MySQL Redis 系统设计 常用框架 Spring ZooKeeper 权限认证 设计模式 数据通信 网站架构 ...

    java8源码-putaoo.github.io:putao.github.io

    源码 目录 Java 基础 容器 并发 JVM I/O Java 8 编程规范 网络 操作系统 Linux相关 数据结构与算法 数据结构 算法 数据库 MySQL Redis 系统设计 常用框架 Spring/SpringBoot ZooKeeper 权限认证 设计模式 数据通信 ...

    毕业设计电商网站源码-Hello-World:我在github中的第一个存储库

    毕业设计电商网站源码 推荐几个比较实用的阿里云服务,按需选择:1. 、2. 、3. 、4. (企业官网、电商网站,多种可供选择模板,代金券免费领取) Gitchat 推荐: Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java...

    java8源码-JavaGuide:指南

    源码 点击关注及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 作者的其他开源项目推荐: : 适合新手入门以及有经验的开发人员查阅的 Spring Boot 教程(业余时间...

    Java服务器端开发面试.doc

    Java服务器端开发面试题 Java服务器端开发面试题篇1 Hashcode()和equals(), 明白背后的原理,包括hashcode()的用法,各自的区别,如何,何时覆盖,为何覆盖 区别new String()和 申明的字符串的区别,String不变量,堆...

    毕业设计电商网站源码-JavaPower:JavaPower

    毕业设计电商网站源码 推荐几个比较实用的服务:1. (企业官网、电商网站,多种可供选择模板,代金券免费领取)、2. 、3. Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础 Java 集合框架 Java 多...

    毕业设计电商网站源码-JavaGuide:指南

    毕业设计电商网站源码 推荐几个比较实用的服务:1. (企业官网、电商网站,多种可供选择模板,代金券免费领取)、2. 、3. Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础 Java 集合框架 Java 多...

    毕业设计电商网站源码-javaGuide:指南

    毕业设计电商网站源码 推荐几个比较实用的服务:1. (企业官网、电商网站,多种可供选择模板,代金券免费领取)、2. 、3. Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础 Java 集合框架 Java 多...

    毕业设计电商网站源码-JavaGuide:学习资料

    毕业设计电商网站源码 推荐几个比较实用的服务:1. (企业官网、电商网站,多种可供选择模板,代金券免费领取)、2. 、3. Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础 Java 集合框架 Java 多...

    毕业设计电商网站源码-JavaGuide:行家

    毕业设计电商网站源码 推荐几个比较实用的阿里云服务,按需选择:1. 、2. 、3. 、4. (企业官网、电商网站,多种可供选择模板,代金券免费领取) Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础...

    java8源码-ToBeABestJavaer:我要把java一顿暴学!!!!

    源码 点击关注及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 作者的其他开源项目推荐: : 适合新手入门以及有经验的开发人员查阅的 Spring Boot 教程(业余时间...

    java8源码-JavaGuide:【Java学习+面试指南】一份涵盖大部分Java程序员所需要掌握的核心知识

    源码 点击关注及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 作者的其他开源项目推荐: : 适合新手入门以及有经验的开发人员查阅的 Spring Boot 教程(业余时间...

Global site tag (gtag.js) - Google Analytics