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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mpeg4标准包含{xvid\divx,h264\avc}

    mpeg4标准包含{xvid\divx,h264\avc}“MPEG-4由一系列的子标准组成,被称为部……………………………第二部(ISO/IEC14496-2):视讯:定义了一个对各种视觉信息(包括视讯,静止纹理,计算机合成图形等等)的编解码器。对视讯部分来说,众多”Profiles”中很常用的一种是AdvancedSimpleProfile(ASP),例如XviD编码就属于MPEG-4

    2022年9月18日
    0
  • 一个简单的WPF字体选择器实现

    很久没有写博客了。这是放暑假中的第一篇博客,以后会多多更新!!!这就是我写的一个字体选择器,界面如下:本程序用到的技术比较简单,仅仅是用了Font类的几个方法和数据绑定而已。首先建一个四行两列

    2021年12月27日
    37
  • django formview_django queryset合并

    django formview_django queryset合并APIView视图类在DRF中,推荐使用类视图,因为类视图可以通过继承的方式把一些重复性的工作抽取出来,而使得代码更加简洁。当然如果你不想使用类视图,那么就用@api_view装饰器包裹一下就可以。

    2022年8月7日
    5
  • 【Jqurey EasyUI+Asp.net】—DataGrid增加、删、更改、搜

    【Jqurey EasyUI+Asp.net】—DataGrid增加、删、更改、搜

    2022年1月15日
    45
  • android 磨皮原理,Android平台Camera实时滤镜实现方法探讨(九)–磨皮算法探讨(一)

    android 磨皮原理,Android平台Camera实时滤镜实现方法探讨(九)–磨皮算法探讨(一)上一篇开头提到了一些可用于磨皮的去噪算法,下面我们实现这些算法并且观察效果,咱不考虑实时性的问题该算法利用图像局部统计特性进行滤波处理,例如NXM像素的灰度图,首先计算点(i,j)所在窗口内(大小为(2n+1)(2m+1))的平均值m(i,j)以及均方差:得到加性去噪后的结果为:其中:1.根据原文提出的优化方法,首先是建立两个积分图,如图所示,点4的积分即为Sum(Ra)+Sum(Rb)+…

    2022年7月22日
    6
  • 报错sqlSessionFactory「建议收藏」

    报错sqlSessionFactory「建议收藏」Exceptionencounteredduringcontextinitialization-cancellingrefreshattempt:org.springframework.beans.factory.BeanCreationException:Errorcreatingbeanwithname’sqlSessionFactory’definedinclasspathresource[applicationContext.xml]:Invocation

    2022年5月1日
    208

发表回复

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

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