hashCode的问题

hashCode的问题

平时打印对象的地址不就是 类名@...    这个就是hashcode了么?但是老师说hashcode是分类数据的一种算法?    还有就是分类到不同的桶里,对象的地址不是唯一的么?为什么还能把有相同的hashcode的对象分成一类? 而且如果hashcode相等了,那对象就一定相等了,equals方法不就没必要写了么?hashcode和哈希表是什么关系?

正在回答

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

1回答

你看到的一串十六进制表示的数字串是表示地址的。

分类到不同的桶里,可以理解成那个桶是可以存放好多数据的,每个数据都会存放到一个内存空间,所以这个桶就是一片内存空间,可以存储多个数据。

hashcode相等,不一定对象就相等。就像视频中说的,hashcode相等只是在一个桶里。一个桶里有很多对象,还要再用equals方法进行比较。

哈希算法是算法的一中,哈希表是数据结构

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!




  • 莨菽菽 提问者 #1
    还是有点混乱,网上说System.out.println()是默认调用toString(),而 网上查的toString()源码: public String toString() { return getClass().getName() + "@" + Integer.toHexString(hashCode()); } 这么说打印对象的时候就是 类名@hashcode 但是打印出来的十六进制又是表示地址的。但是地址呦不是hashcode。。请问这里怎么理解
    2017-05-17 12:11:59
  • 好帮手慕珊 回复 提问者 莨菽菽 #2
    Object类中的hashCode()方法刚好返回的就是对象的地址值,所以打印出来的是对象的地址。但是这个只是得到hashCode值的一种方式,hashCode的值是可以自己根据需求进行设定的。
    2017-05-17 17:00:32
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星

相似问题

登录后可查看更多问答,登录/注册

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

在线咨询

领取优惠

免费试听

领取大纲

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