Hashcode的作用_hashcode实现

Hashcode的作用_hashcode实现根据API文档,java中的hashcode事实上是跟equals是有着密切联系的,hashcode是为了提高哈希表的性能下面的话来自JDK:hashCodepublicinthashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如java.util.Hashtable提供的哈希表)的性能。publicnativeinthashCode();说明是一个本地方法,它的…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

根据API文档,java中的hashcode事实上是跟equals是有着密切联系的,hashcode是为了提高哈希表的性能

下面的话来自JDK:

hashCode

public int hashCode()返回该对象的哈希码值。支持此方法是为了提高哈希表(例如 java.util.Hashtable 提供的哈希表)的性能。

public native int hashCode();

说明是一个本地方法,它的实现是根据本地机器相关的。当然我们可以在自己写的类中覆盖hashcode()方法,比如String、Integer、Double。。。。等等这些类都是覆盖了hashcode()方法的。例如在String类中定义的hashcode()方法如下:

public int hashCode() {

int h = hash;

if (h == 0) {

int off = offset;

char val[] = value;

int len = count;

for (int i = 0; i < len; i++) {

h = 31*h + val[off++];

}

hash = h;

}

return h;

}

解释一下这个程序(String的API中写到):

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

使用 int 算法,这里 s[i] 是字符串的第 i 个字符,n 是字符串的长度,^ 表示求幂。(空字符串的哈希码为 0。)

在集合中,比如HashSet中,要求放入的对象不能重复,那么首先会调用hashcode,如果hashcode相等,则继续调用equals,也相等,则认为重复。

如果重写equals后,如果不重写hashcode,则hashcode就是继承自Object的,返回内存编码,这时候可能出现equals相等,而hashcode不等,你的对象使用集合时,就会等不到正确的结果

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/196224.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Excel中VBA编程学习笔记(一)「建议收藏」

    Excel中VBA编程学习笔记(一)「建议收藏」1、注释及编码规则注释:单引号:可以位于句子结尾或者单独一行; Rem:单独一行 编码规则:如果VB中的关键字是由多个英文字母组成,则系统自动将每个单词的首字母转换成大写字母,其余字母一律转换成小写字母。 对于用户自定义的变量名、过程名、函数名,VB以第一次定义的为准,以后输入的自动转换成首次的形式。 如果在同一行写多条语句,语句间要用冒号“:”隔开。例如:Form1…

    2022年6月1日
    126
  • 中国90后福布斯排行榜前30_2019中国90后十大富豪榜

    中国90后福布斯排行榜前30_2019中国90后十大富豪榜作者|佩奇出品|区块链大本营(blockchain_camp)近日,福布斯发布“Forbes30Under30Asia2019”金融和风险投资类榜单…

    2022年9月30日
    3
  • CAN协议学习(一)

    CAN协议学习(一)一、CAN协议的特点1)在总线空闲时,所有单元都可以发送消息,两个以上单元同时发送消息时,对各消息的Identifier进行逐位仲裁比较,仲裁获胜的单元(具有较高优先级)可继续发送消息,仲裁失败的单元停止发送。2)消息中没有地址,消息广播到总线上,任何总线上的单元都可以接收消息。在总线上增加单元,不会影响到其它的单元。3)最高数据传输速率1Mbps(距离小于40m),最远传输距离10k…

    2022年6月28日
    31
  • datagrip2020激活码mac_通用破解码

    datagrip2020激活码mac_通用破解码,https://javaforall.net/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

    2022年3月16日
    46
  • C语言 一个字符常量占几个字节

    C语言 一个字符常量占几个字节网上一大堆说的不清不楚,总而言之问你的是一个字符常量占几个字节回答:     字符型常量是由一对单引号括起来的单个字符。它分为一般字符常量和转义字符。一个字符常量在计算机的存储中占据一个字节…

    2022年6月26日
    36
  • ADRC算法Auto Disturbances Rejection control

    ADRC算法Auto Disturbances Rejection control 自抗扰控制 其中,e=v(t)-y(t)是控制系统参考输入量v(t)与被控对象输出量y(t)之间的差值,kp比例系数,ki积分系数,,kd微分系数优点:1.仅由误差来决定控制2.运算量低,可以以极高的速率运行缺点:1.误差的取法e=v-y,使得初始时刻误差较大,容易造成控制系统快速性和超调的矛盾,比如输入为阶跃信号的时候,会导致误差函数也是一个阶跃信号,对…

    2022年5月16日
    50

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号