简述hashcode和equals的区别
如果在hashmap
当中来说的话,作用分别如下:
hashcode
是定位当前元素,需要找到某个元素在当前数组(桶)当中的下标- equals是需要在
hashcode
定位的某个下标(桶)中遍历链表,比较哪个key是相同的。
举个例子,如果我们要在字典中查找“美丽”这个词语,我们应该先找到“美”在哪个地方,那么实际上我们找“美”的过程就可以理解成
hashcode
。查找“美”字后,由于“美”后面(下标)有很多字可以组成词语,例如“美人”、“美景”等等。但我们需要找到的是“美丽”,所以应该依次比较第二个字是否为“丽”,此时就相当于使用到equals了。
如果两个数据的hashcode
相同,那么equals相同吗?
如果两个数据的
hashcode
相同,那么一定能hash到同一位置(同一下标)。但由于该下标是一个链表,有很多节点,存放的元素有很多,所以equals不一定相同。
如果两个数据的hashcode
不相同,那么equals相同吗?
如果两个数据的
hashcode
不相同,那么两个数据的下标都不一样,那么equals就更不可能相同了!
如果两个数据的equals相同,那么hashcode
相同吗?
如果两个数据的equals相同,那么一定是同一个对象,因此
hashcode
就一定相同了!