hashCode方法

hashCode方法

老师您好!

能说下怎么重写hashCode方法吗

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

1、判断一个对象是否相等是通过equals方法和hashCode来共同判断的;只重写equals方法是无法保证的,哈希码不同,也能说明他们不是同一个对象,因此需要同时重写equals方法和hashCode方法;往Set中插入新的对象时,首先会用该对象的hashCode()与已经存在对象的hashCode()做比较,如果不等,就可以将数据插入set集合;如果相等,才会调用equals()方法,如果equals结果为true,说明已经存在,就不能再插入,如果为false,可以插入。

2、set集合是无序,输出顺序和添加元素的顺序是无关的。

3、重写hashCode方法,依旧使用工具生成就可以了

  • 这里对于hashCode的说法好像刚好反了把,如果hashCode相同,说明这两个对象在同一规则下进入同一个'桶'内,也就是缩小了查找范围从而为进一步的比较减少了执行次数; 而hashCode不同的话,说明两个对象不是同一个,这样的话equal方法就不必执行了,直接可以往set里插入新数据了。
    2018-03-22 15:07:24
  • “如果相等,那就不能插入,如果不等,才会调用equals()方法”应该是“如果不等,就可以将数据插入set集合;如果相等,才会调用equals()方法”,前面这句话笔误了~~
    2018-03-22 16:34:38
一叶知秋519 2017-11-20 17:35:52

你好,这个方法可以直接使用Eclipse自动生成;需要生成hashCode的类中,右键-Source——Generate hashCode and equals... Eclipse就会自动生成啦~

  • 提问者 慕粉3103860 #1
    老师你好~ 我用的集成开发环境是idea,默认生成的hashCode是返回父类的hashCode,所以当我重写了equal方法后,还是能添加重复的对象; 老师我在这里也顺便问问几个问题: 1 为什么我只重写equal方法,还是能添加内容一样的对象呢,set是根据什么来判断对象是否是一样的呢 2 我重写hashCode,让它直接返回父类的hashCode,不重写equal方法,打印输出如下: 李四 5500.0 张三 5000.0 张三 5000.0 赵六 4000.0 现在我同样是只重写hashCode方法,但是我不返回父类hashCode了,而是直接返回-1,然后打印输出如下: 张三 5000.0 李四 5500.0 赵六 4000.0 张三 5000.0 这说明两个相同的类放的位置前后不一样,为什么会这样呢
    2017-11-20 17:47:29
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师