Java基础系列-HashCode的原理以及用法

原创 2018年04月17日 09:00:50

String类中的HashCode方法一直没有深入的了解,今天特地记录一下整个学习过程。

首先,上源码:

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;
}

源码中自带的说明翻译一下:

Returns a hash code for this string. The hash code for a {@code String} object is computed as s[0]*31^(n-1) + s[1]*31^(n-2) + … + s[n-1] using {@code int} arithmetic, where {@code s[i]} is the ith character of the string, {@code n} is the length of the string, and {@code ^} indicates exponentiation. (The hash value of the empty string is zero.) 。@return a hash code value for this object.

用法:
哈希码用于表示对象的特征,可以用于判断对象是否相等。

其他补充:

String hashCode 方法为什么选择数字31作为乘子,从网上转载一篇,说的很详细:

https://juejin.im/entry/5a70af74518825732739e873

JDK源码中的Hash原理,同样转载了一篇

https://www.zhihu.com/question/20733617

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hugenshen/article/details/79969543

透明位图

Ron GeryMicrosoft 网络开发技术小组摘要这篇文章讨论了在 Microsoft Windows 图形环境中用位图达到透明和屏蔽效果的几种方法,包括通过仿真和使用特殊的驱动器功能。包含其中...
  • ghj1976
  • ghj1976
  • 2000-11-21 10:07:00
  • 1934

Java面试——HashCode的作用原理和实例解析

HashCode定义   (1)HashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,HashCode是用来在散列存储结构中确定对象的存储地址的; (2)如果两个对象相...
  • SEU_Calvin
  • SEU_Calvin
  • 2016-08-02 14:50:19
  • 13851

equals和HashCode深入理解以及Hash算法原理

equals()和HashCode()深入理解以及Hash算法原理(带源码分析)
  • qq_21688757
  • qq_21688757
  • 2016-11-07 16:57:48
  • 6264

HashCode的作用原理和实例解析

HashCode定义   (1)HashCode的存在主要是用于查找的快捷性,如Hashtable,HashMap等,HashCode是用来在散列存储结构中确定对象的存储地址的; (...
  • baidu_31657889
  • baidu_31657889
  • 2016-08-24 10:54:59
  • 10418

Java基础之hashCode方法详解

想要明白hashCode的作用,必须要先知道java中的集合。(不明白的请看Java基础之集合框架详解(二)List篇和Java基础之集合框架详解(三)Set篇) Java中的Collection集合...
  • u012483425
  • u012483425
  • 2015-06-05 14:11:50
  • 772

Java HashSet与hashCode详解

在进入主题之前,先来扯一些前话,帮大家复习一下基础,看下面的一个例子,比如我们先定义一个Point类 public class Point {     public int x;    ...
  • gewuban
  • gewuban
  • 2016-09-09 09:51:06
  • 2063

equals()方法和hashCode()方法在HashMap中的应用

在Object类中定义了两个非常重要的方法: public boolean equals(Object obj) public int hashCode() 如果我们要向HashMap中添加我们自己定...
  • tracker_w
  • tracker_w
  • 2014-03-25 12:50:34
  • 1977

Java中equals()与hashCode()的原理与设计

1.何时需要重写equals() 当一个类有自己特有的“逻辑相等”概念(不同于对象身份的概念)。 2.为什么改写equals()的时候,总是要改写hashCode() ...
  • songliying001
  • songliying001
  • 2014-08-26 16:24:15
  • 587

String 的hashCode源码实现原理

源代码如下:  public int hashCode() {         int h = hash;         if (h == 0 && value.length > 0) {...
  • fjr_huoniao
  • fjr_huoniao
  • 2016-03-24 15:47:19
  • 3821

Java源码之String.hashCode的底层实现

值得注意的是, arrayOfChar[j]的值是char类型的,但是跟整型相加之后得到的数值依然是整型,而不是拼接成字符串。原因是char类型+int类型会先将char通过ASCII表转换成int类...
  • qq_33280786
  • qq_33280786
  • 2017-04-03 23:30:17
  • 102
收藏助手
不良信息举报
您举报文章:Java基础系列-HashCode的原理以及用法
举报原因:
原因补充:

(最多只允许输入30个字)