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不等,你的对象使用集合时,就会等不到正确的结果

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」

    Ubuntu VMware Tools安装详细过程(非常靠谱)「建议收藏」说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家!一.前言VMwareUbuntu安装以及详细过程:https://blog.csdn.net/qq_41782425/article/details/85119258,需要安装Ubuntu系统的小伙伴可以看看,非常详细哦~为什么博主会单独写一个UbuntuVMwaerTools的安装博客,第一:在Ubuntu系…

  • cutoff激活成功教程版下载_cutout

    cutoff激活成功教程版下载_cutout000000013F67F64|E831680500         |callcutout.13F6D5E80                  |000000013F67F64|4C8D0DCAF33C00   |lear9,qwordptrds:[13FA4EA20]        |;13FA4EA20:L”menuicon.png”

  • pycharm社区版激活码2021破解方法

    pycharm社区版激活码2021破解方法,https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • eric6教程(钉钉的使用方法和技巧)

    Eric6是Python编程语言的IDE程序,功能之强大,绝不输于Python平台下的任何IDE程序,占用内存低运行速度快足以令Eric6藐视群雄,最可贵的是与PyQt5结合的更是天衣无缝,简直就是开发GUI程序的绝配。PyQt5是赖以Python编程语言的外部GUI开发语言,其夯实的底层基础与强大的可视化界面设计让PyQt5成为Python语言GUI开发的佼佼者,更新速度之快,开发GUI程序的速度之快,可以说其它GUI开发语言所望尘莫及。虽说Eric6与PyQt5结合使用可快速开发GUI程序,但是

  • oracle事务隔离级别查看_oracle数据库隔离级别

    oracle事务隔离级别查看_oracle数据库隔离级别脏读(dirtyread):当一个事务读取另一个事务尚未提交的修改时,产生脏读。不可重复读(nonrepeatableread):同一查询在同一事务中多次进行,在此期间,由于其他事务提交了对数据的修改或删除,每次返回不同的结果。幻读(phantomread):同一查询在同一事务中多次进行,由于其他提交事务所做的插入操作,虽然查询条件相同,每次返回的结果

  • 使用python创建数组的方法[通俗易懂]

    使用python创建数组的方法[通俗易懂]本文介绍两种在python里创建数组的方法。第一种是通过字典直接创建,第二种是通过转换列表得到数组。方法1.字典创建(1)导入功能(2)创立字典(3)将字典带上索引转换为数组代码示例如下:importnumpyasnpimportpandasaspddata={“name”:[‘xiaozhang’,‘xiaoli’,‘lily’,‘tony’],“sex”:[‘bo…

发表回复

您的电子邮箱地址不会被公开。

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