重写Equals为什么还要重写GetHashCode

如果两个对象相等那么他们的HashCode也相等

如果两个对象不等那么他们的HashCode不太可能相等

重写了equals方法后,比较两个对象相同,但他们的HashCode值不同,那么当这两个对象插入HashSet时会出现问题,如下:

HashSet 插入元素:插入前先根据key得到HashCode,定位桶的位置,遍历桶中所有项使用equals比较是否相等,相等的话禁止插入集合

所以若Equal比较相同 , HashCode不同 则 插入到不同的桶中相同的元素,如下图途所示:

所以需要重写GetHashCode

如果此对象以key的形式插入到插入到Hashtable 或者插入Hashset 需要重写两个方法。

posted @ 2018-11-14 22:23  vvf  阅读(130)  评论(0编辑  收藏  举报