A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 愤怒的大飞机 中级黑马   /  2017-1-10 23:23  /  974 人查看  /  3 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

hashCode和equals的疑问

到底什么集合和map,什么时候需要重写hashCode和equals方法

有点搞不明白了 ArrayList<Person>的 Person中重写了hashCode和equals方法,能不能存储重复的人

TreeSet已经重写了compareTo方法,还有必要重写hashCode和equals 方法吗

3 个回复

正序浏览
袁志娜 发表于 2017-1-11 22:10

大神,收下我的膝盖,还有一问,map的其它子类呢
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回复 使用道具 举报
  1. 到底什么集合和map,什么时候需要重写hashCode和equals方法
        答:hashSet、LinkedHashSet和HashMap、LinkedHashMap集合他的设计初衷是不能存储相同的对象,而具体怎么实现或者说怎么判断两个对象是否相同,
                底层是通过hashCode和equals方法来做出判断的,因次如何重写hashCode和equals方法来鉴别两个对象是否相同是
                可以自己定义的,但是就实际应用而言一般都是根据类内部的字段来进行组合判断的,而java一般都有自动生成的这两个方法来实现.
               
  2. 有点搞不明白了 ArrayList<Person>的 Person中重写了hashCode和equals方法,能不能存储重复的人
          答:可以存储,因为ArrayList在存储对象进去的时候没有判定对象是否相同的逻辑,所以即使你重写的hashCode和equals方法认为对象A和B是相同的也没用.
                  而hashSet、LinkedHashSet和HashMap、LinkedHashMap集合在添加对象进去的时候会调用hashCode和equals方法进行判断对象是否相同.
  3. TreeSet已经重写了compareTo方法,还有必要重写hashCode和equals方法吗
          答:不需要,TreeSet是通过比较器或者重写compareTo方法来实现比较大小的.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马