Java集合中,为什么HashSet的自定义类要重写hashCode()、equals(),HashMap的自定义类就不用?

Java集合中,为什么HashSet的自定义类要重写hashCode()、equals(),HashMap的自定义类就不用?

正在回答

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

1回答

同学你好,同学描述的自定义类,是否是往集合中添加的对象类。如下所示:如果时,则HashMap也是可以进行重写hashCode()、equals()方法的,如果要求HashMap中存储的属性值不可以一致,则就需要进行重写了。如果没有要求,则可以不重写,是没有强制要求的。

http://img1.sycdn.imooc.com//climg/60a9b7d10995a17707790245.jpg

http://img1.sycdn.imooc.com//climg/60a9b7f20946b2fc07180652.jpg

祝学习愉快!

  • 童真模式启动 提问者 #1
    意思时HashMap不重写hashCode()、equals()方法,当出现重复值的时会像HashSet一样保留最后一次更新的值吗?如果是,那是不是可以这样理解:除了HashMap是键值对形式,HashSet不是外,使用上这两种集合没有区别?


    2021-05-23 22:44:16
  • 同学你好,1、HashMap是以key-value进行储存的,则key值是不允许重复的,但value值是可以重复的。

    2、具体区别,如下所示:

    HashMapHashSet
    HashMap实现了Map接口HashSet实现了Set接口
    HashMap储存键值对HashSet仅仅存储对象
    使用put()方法将元素放入map中使用add()方法将元素放入set中
    HashMap中使用键对象来计算hashcode值HashSet使用成员对象来计算hashcode值,对于两个对象来说hashcode可能相同,所以equals()方法用来判断对象的相等性,如果两个对象不同的话,那么返回false
    HashMap比较快,因为是使用唯一的键来获取对象HashSet较HashMap来说比较慢

    综上所示,在使用HashMap时,如果key是自定义的类,就必须重写hashcode()和equals()。

    祝学习愉快!

    2021-05-24 09:53:10
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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