黑马程序员技术交流社区

标题: hashCode和equals的疑问 [打印本页]

作者: 愤怒的大飞机    时间: 2017-1-10 23:23
标题: hashCode和equals的疑问
hashCode和equals的疑问

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

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

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

作者: guyouzhong    时间: 2017-1-11 22:01
  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方法来实现比较大小的.
作者: 袁志娜    时间: 2017-1-11 22:10

作者: 愤怒的大飞机    时间: 2017-1-11 23:05
袁志娜 发表于 2017-1-11 22:10

大神,收下我的膝盖,还有一问,map的其它子类呢





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2