针对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 ;
相关推荐
哈希函数用的是java中String.hashCode()算法(经实际验证其碰撞率极低且相近的文本散列值相邻,存取的效率更高.)。可自动无限增加容量(内存允许)。3、连续10万次不同内容存取效率为,存10万次共耗时约280ms ,取10万次...
哈希函数用的是java中String.hashCode()算法(经实际验证其碰撞率极低且相近的文本散列值相邻,存取的效率更高.) 可自动无限增加容量(内存允许) 3、连续10万次不同内容存取效率为,存10万次共耗时约280ms ,取10万次共...
毕业设计电商网站源码 推荐几个比较实用的服务:1. (企业官网、电商网站,多种可供选择模板,代金券免费领取)、2. 、3. Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础 Java 集合框架 Java 多...
疯狂的java讲义项目源码具有可视化的 Java 图形算法实现并与 JUNG Graph Lib 进行比较 该项目是在第三学期 B.Sc 实践任务中的结果。 应用信息科学“图论概念与算法”课程。 由于本次讲座是在德国大学进行的,因此...
毕业设计电商网站源码 推荐几个比较实用的阿里云服务,按需选择:1. 、2. 、3. 、4. (企业官网、电商网站,多种可供选择模板,代金券免费领取) Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础...
源码 目录 Java 基础 容器 并发 JVM I/O Java 8 编程规范 网络 操作系统 Linux相关 数据结构与算法 数据结构 算法 数据库 MySQL Redis 系统设计 常用框架 Spring ZooKeeper 权限认证 设计模式 数据通信 网站架构 ...
源码 目录 Java 基础 容器 并发 JVM I/O Java 8 编程规范 网络 操作系统 Linux相关 数据结构与算法 数据结构 算法 数据库 MySQL Redis 系统设计 常用框架 Spring/SpringBoot ZooKeeper 权限认证 设计模式 数据通信 ...
毕业设计电商网站源码 推荐几个比较实用的阿里云服务,按需选择:1. 、2. 、3. 、4. (企业官网、电商网站,多种可供选择模板,代金券免费领取) Gitchat 推荐: Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java...
源码 点击关注及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 作者的其他开源项目推荐: : 适合新手入门以及有经验的开发人员查阅的 Spring Boot 教程(业余时间...
Java服务器端开发面试题 Java服务器端开发面试题篇1 Hashcode()和equals(), 明白背后的原理,包括hashcode()的用法,各自的区别,如何,何时覆盖,为何覆盖 区别new String()和 申明的字符串的区别,String不变量,堆...
毕业设计电商网站源码 推荐几个比较实用的服务:1. (企业官网、电商网站,多种可供选择模板,代金券免费领取)、2. 、3. Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础 Java 集合框架 Java 多...
毕业设计电商网站源码 推荐几个比较实用的服务:1. (企业官网、电商网站,多种可供选择模板,代金券免费领取)、2. 、3. Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础 Java 集合框架 Java 多...
毕业设计电商网站源码 推荐几个比较实用的服务:1. (企业官网、电商网站,多种可供选择模板,代金券免费领取)、2. 、3. Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础 Java 集合框架 Java 多...
毕业设计电商网站源码 推荐几个比较实用的服务:1. (企业官网、电商网站,多种可供选择模板,代金券免费领取)、2. 、3. Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础 Java 集合框架 Java 多...
毕业设计电商网站源码 推荐几个比较实用的阿里云服务,按需选择:1. 、2. 、3. 、4. (企业官网、电商网站,多种可供选择模板,代金券免费领取) Ⅰ Ⅱ Ⅲ Ⅳ Ⅴ Ⅵ Ⅶ Ⅷ Ⅸ Ⅹ :hot_beverage: Java Java/J2EE 基础...
源码 点击关注及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 作者的其他开源项目推荐: : 适合新手入门以及有经验的开发人员查阅的 Spring Boot 教程(业余时间...
源码 点击关注及时获取笔主最新更新文章,并可免费领取本文档配套的《Java面试突击》以及Java工程师必备学习资源。 作者的其他开源项目推荐: : 适合新手入门以及有经验的开发人员查阅的 Spring Boot 教程(业余时间...