针对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 ;
相关推荐
在String类中,哈希算法的实现主要体现在hashCode()方法中。hashCode()方法的源代码如下所示: ```java public int hashCode() { int h = hash; if (h == 0) { int off = offset; char val[] = value; int len...
这个压缩包“基本类源代码”很可能包含了Java语言中的一些基础类的源文件,例如`Object`类、`String`类、`Integer`类、`ArrayList`类等。这些类在Java开发中非常常见,深入理解它们的源代码对于提升编程技能和优化...
在Java编程语言中,字符串处理是一项至关重要的任务,因为字符串在各种应用场景...项目的源代码会包含具体的实现,例如如何高效地合并字符串、如何实现不区分大小写的比较等,这些都是对Java字符串处理算法的宝贵实践。
哈希函数用的是java中String.hashCode()算法(经实际验证其碰撞率极低且相近的文本散列值相邻,存取的效率更高.)。可自动无限增加容量(内存允许)。3、连续10万次不同内容存取效率为,存10万次共耗时约280ms ,取10万次...
在这个"java优秀源码-lecture-hashing"项目中,我们可以深入学习到出色的哈希算法的源代码以及常见哈希函数的Java实现。 1. **哈希表(Hash Table)**: 哈希表是基于哈希函数的数据结构,它提供了一种快速查找、...
源代码是理解这些类库工作原理的关键,通过阅读源码,开发者可以深入学习 Java 的设计理念和实现机制。 在J2SE核心类库中,包括了许多关键模块: 1. **基础类**:如`java.lang`包,其中包含所有Java程序的基本类,...
在Java编程中,找出两个数组中的重复元素是一个常见的问题,特别是在数据处理和算法设计中...以上就是关于“java求两个数组中重复元素源代码”的详细解析,涵盖了数组操作、重复元素查找、代码实现及优化等方面的知识。
在Java开发中,深入理解JDK的源代码是提升编程技能的重要步骤。JDK,全称为Java Development Kit,是Oracle公司提供的Java编程语言的标准开发工具集。它包含了编译器、运行时环境以及一系列用于创建和运行Java应用...
代码解读:因为 x 和 y 指向的是同一个引用,所以 == 也就是 true,而 new String() 方法则重写开辟了内存空间,所以 == 结果为 false,而 equals 比较的一直是值,所以结果都为 true。 equals 的本质 equals 本质...
在Java编程语言中,"洗牌"是一种常见的算法,它常用于模拟扑克牌游戏或者其他需要随机排列元素的场景。这个过程通常涉及到数组或集合的随机排序。在这个问题中,我们关注的是如何使用`java.util.Random`类来实现这一...
它包含了Java开发工具包(JDK)的所有核心类库的源代码,包括Java语言基础库、集合框架、I/O流、网络编程、多线程、反射、垃圾回收等关键组件。通过阅读源码,开发者可以学习到Java设计模式、API实现细节以及内部...
rt.jar源码的分析对于理解Java语言的底层机制、优化代码性能以及进行Java平台的开发具有重要的意义。 一、rt.jar的构成与作用 rt.jar中的“rt”代表“Runtime”,它是Java运行时系统的关键组成部分。这个jar文件...
HashMap 的存储实现可以通过查看其 put(K key, V value) 方法的源代码来了解。该方法首先判断 key 是否为 null,然后根据 key 的 hashCode 值计算 Hash 值,接着搜索指定 hash 值在对应 table 中的索引,如果 i 索引...
在这个"JavaJdkSourceCode"项目中,我们可能找到了完整的JDK源代码,这包括了类库、编译器、虚拟机等多个组成部分。 首先,让我们关注Java的基础库,如`java.lang`包,这个包包含了Java中最基础的类,如`Object`、`...
String 类是面试中常见的重点,涉及到字符串的创建、拼接、比较和不可变性等特性。运算章节涵盖了算术、比较、逻辑和位运算符,强调了它们在程序中的应用。关键字是控制程序流程的关键,包括 final、static、...
哈希函数用的是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 基础...