Java教程

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

本文主要是介绍java中为什么equals方法要重写hashcode方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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

 

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

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

举个例子:

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

总结:hashcode值存在哈希冲突

equals比较的是hashcode地址

这篇关于java中为什么equals方法要重写hashcode方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!