java中为什么equals方法要重写hashcode方法

哈希表是由数组和链表组成,这个数组的索引值就是hashcode也就是地址,我们知道数组根据索引值查找数据的时间复杂度是O(1),索引我们equals方法比较的地址也就是这个数组的索引值,也就是hashcode值

java中为什么equals方法要重写hashcode方法

 

哈希表有很多算法,最简单的最常见的一种是取余算法:

就是由这个数和10取余,求到它的个位数,然后根据这个个位数进行分类,相同个位数放到同一个数组下,数组下的数据之间是由链表连接起来的,所以hashcode值相同并不代表数值就相同,它们存在哈希冲突。

举个例子:

String的equals方法就是这样重写的,我们先比较地址是否相等,因为根据地址索引查到数据很快,再判断是不是string类型的,再比较内容。

总结:hashcode值存在哈希冲突

equals比较的是hashcode地址

上一篇:==和equals的区别


下一篇:WPF绑定RadioButton的标准做法