对象存放到HashSet或者HashMap,要先进行哈希值计算,映射到对应的数组下标,依次和这个数组下标中的元素进行equals比较。若有equals为true的,就不会将其放入集合,否则加入到该下标的链表中。
如果重写equals不重写hashCode会怎样?
因为两个内容相同的对象,它的默认HashCode值一定不一样(默认是对象的地址),那么两个内容相同的对象会存放到哈希表不同的下标中。不符合常规的逻辑,即Set中不能有内容相同的对象。
因此要保证,内容相同的对象,它的HashCode也要相等,防止哈希表中有重复内容的元素添加到不同的数组下标中。