java中重写equals方法为什么要重写hashcode方法说明
答案:2 悬赏:0 手机版
解决时间 2021-03-03 05:00
- 提问者网友:雨不眠的下
- 2021-03-02 09:31
java中重写equals方法为什么要重写hashcode方法说明
最佳答案
- 五星知识达人网友:山君与见山
- 2021-03-02 10:51
1、重写equals方法时需要重写hashCode方法,主要是针对Map、Set等集合类型的使用;
a: Map、Set等集合类型存放的对象必须是唯一的;
b: 集合类判断两个对象是否相等,是先判断equals是否相等,如果equals返回TRUE,还要再判断HashCode返回值是否ture,只有两者都返回ture,才认为该两个对象是相等的。
2、由于Object的hashCode返回的是对象的hash值,所以即使equals返回TRUE,集合也可能判定两个对象不等,所以必须重写hashCode方法,以保证当equals返回TRUE时,hashCode也返回Ture,这样才能使得集合中存放的对象唯一。
a: Map、Set等集合类型存放的对象必须是唯一的;
b: 集合类判断两个对象是否相等,是先判断equals是否相等,如果equals返回TRUE,还要再判断HashCode返回值是否ture,只有两者都返回ture,才认为该两个对象是相等的。
2、由于Object的hashCode返回的是对象的hash值,所以即使equals返回TRUE,集合也可能判定两个对象不等,所以必须重写hashCode方法,以保证当equals返回TRUE时,hashCode也返回Ture,这样才能使得集合中存放的对象唯一。
全部回答
- 1楼网友:刀戟声无边
- 2021-03-02 10:59
equals 方法和 hashcode 方法没有必然关系,并不是说重写 equals 方法就一定要重写 hashcode 方法。
用途不同, equals 用来比较两个对象是否相等,在大多数 jdk 的集合类中判断唯一性的时候使用的都是 equals 方法。而 hashcode 方法用来计算对象的 hash 值,基于 hash 算法存放数据的集合会用到,比如 hashmap、hashset。
equals 方法很好理解,区别于直接比较对象内存地址的 == ,它被设计为用来比较对象内容语义上的相等。
而要理解 hashcode 方法,首先你要知道什么是散列算法,了解一下 hashmap 底下的存储结构和存放读取数据的过程(对 key 调用 hashcode 得散列值,找到该散列值对应的桶,往桶里放 value)。你可以认为 hashcode 是为了给对象分类用的。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯