黑马程序员技术交流社区
标题:
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