[Java--基础]----String hashCode实现
来源:互联网 发布:南京软件大道租房 编辑:程序博客网 时间:2024/04/26 19:43
hashCode是java.lang.String类提供的方法(自从jdk1.0以来就有的),摘取关键的源码实现如下:
1、声明变量
/** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0
2、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; }
3、举例说明hashCode算法
4、例子中的说明
(1)0x7FFFFFFF介绍
F的二进制码为 1111
7的二进制码为 0111
0x是16进制的标识,0x7FFFFFFF代表十六进制的最高位是0,那么它与任何数做&运算都是正数。
(2)为什么要对hashcode做&运算
因为有些对象的hashcode的最大值会超过Int类型的最大值,为了避免出现负数,我们必须保证为正。
(3)hashCode的计算
为什么字符串"ABC"的HashCode是64578?
计算过程如下:
先确认字符的ASCII码,A=65、B=66、C=67
再利用公式
s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]
计算strHashCode=65*31^(3-1)+66*31^(3-2)+67*31^(3-3)=65*31^2+66*31+67=64578
参考:
http://blog.csdn.net/exceptional_derek/article/details/9074137
http://www.cnblogs.com/chenssy/p/3651218.html
http://blog.csdn.net/cwj649956781/article/details/8589981
阅读全文
0 0
- [Java--基础]----String hashCode实现
- Java String的hashCode实现
- java基础 equals与==区别,String的hashcode
- java string的hashcode
- java string hashcode
- String的hashcode(java)
- String的hashcode(java)
- Java String中的hashCode函数 以BKDR Hash Function实现
- javascript 实现 java 中String的hashcode方法
- java中String类的hashCode方法实现
- Java源码之String.hashCode的底层实现
- 用php实现java的String的hashCode方法
- Java 基础:hashCode方法
- Java基础之hashcode
- String的hashCode方法实现
- Java String中的hashCode函数
- Java String中的hashCode函数
- int java.lang.String.hashCode()
- 水工程之commandBuffer、hdr、msaa兼容性测试及后续
- Android studio 3.0 多渠道打包
- Android Router路由框架
- android Ijkplayer最简单的简单使用
- Android 抓取log信息
- [Java--基础]----String hashCode实现
- 关于ftp和ssh修改端口之后,连接不上的问题
- Hadoop虚拟机集群搭建及配置详解
- 网络监管部门能否查处APP哪?
- 自定义流式布局
- 系统之家win7 32位&64位iso极速旗舰版 v12.1
- Android实现图片圆角
- 一些可以参考的常用工具库类整理
- 230. Kth Smallest Element in a BST