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方法来实现比较大小的. |