hashcode和equals

HashSet是不允许放入相同对象的,假如现在有个HashSet中已存在了1000个对象,那么再插入第1001个对象是如何操作的呢?

分别和已存在的1000个对象做比较,相等则不插入,全部不相等则插入?想一想效率就很低。这个时候hashcode就派上了用场,HashSet在做插入操作时,会先计算要插入对象的hashcode值,

根据得到的hashcode值获取hashset中的位置,再比较这个位置上的对象和要插入的对象是否相同,相同则不插入。故这个时候会调用对象的equals方法进行比较,而所有对象默认的equals方法即是

“==”比较,比较的是内存的地址,这个时候则需要对equals方法进行重写去比较对象的值。所以这个时候两个对象相等就必须要有相同的hashcode值。那么就要重写对象的hashcode()方法。

虽然hashcode是Object的方法,所有类都有这个方法,但实际上只有使用散列表相关的数据结构才需要使用到,如hashset、hashtable、hashmap等,其他的情况hashcode和equals没有关系的。

posted on 2020-06-04 00:30  不迷茫不青春  阅读(59)  评论(0编辑  收藏  举报