HashSet是不允许放入相同对象的,假如现在有个HashSet中已存在了1000个对象,那么再插入第1001个对象是如何操作的呢?
分别和已存在的1000个对象做比较,相等则不插入,全部不相等则插入?想一想效率就很低。这个时候hashcode就派上了用场,HashSet在做插入操作时,会先计算要插入对象的hashcode值,
根据得到的hashcode值获取hashset中的位置,再比较这个位置上的对象和要插入的对象是否相同,相同则不插入。故这个时候会调用对象的equals方法进行比较,而所有对象默认的equals方法即是
“==”比较,比较的是内存的地址,这个时候则需要对equals方法进行重写去比较对象的值。所以这个时候两个对象相等就必须要有相同的hashcode值。那么就要重写对象的hashcode()方法。
虽然hashcode是Object的方法,所有类都有这个方法,但实际上只有使用散列表相关的数据结构才需要使用到,如hashset、hashtable、hashmap等,其他的情况hashcode和equals没有关系的。