equas重写为什么需要重写hashcode函数?如果不改写会怎么样?
时间: 2023-06-09 18:07:59 浏览: 62
在 Java 中,如果两个对象通过 `equals` 函数比较时返回了 `true`,那么这两个对象的 `hashCode` 函数必须返回相同的值。所以如果在重写了 `equals` 函数之后不同时重写 `hashCode` 函数,那么就会出现两个对象通过 `equals` 函数比较返回 `true`,但是它们的 `hashCode` 函数返回的值不同的情况。
这种情况下,如果你使用这两个对象作为键来存储在哈希表中,那么在查找的时候可能会出现问题。哈希表通常是通过对象的哈希值来定位对象所存储的位置的,如果两个对象的哈希值不同,那么就可能会导致这两个对象被存储在不同的位置,而在查找的时候会出现找不到对象的情况。
所以为了避免这种情况,在重写 `equals` 函数之后通常也会同时重写 `hashCode` 函数。
相关问题
重写了 equals 方法 为什么 也需要重写 HashCode 方法?
重写 equals 方法是为了比较两个对象的内容是否相等,而重写 hashCode 方法则是为了确保当两个对象相等时它们具有相同的哈希码,以便在使用哈希表等数据结构时能够正确地进行查找和比较。如果不重写 hashCode 方法,则可能导致相等的对象具有不同的哈希码,从而影响数据结构的效率和正确性。因此,重写 equals 方法和 hashCode 方法是为了确保对象的正确比较和哈希码的正确性。
为什么在重写 equals 方法的时候需要重写 hashCode 方法?
在重写 equals 方法时,我们通常将其与 hashCode 方法一起重写是为了遵循 hashCode 和 equals 之间的一致性要求。在 Java 中,hashCode 方法用于获取对象的哈希码,而 equals 方法用于判断两个对象是否相等。
根据 Java 规范,如果两个对象通过 equals 方法判断为相等,那么它们的 hashCode 值必须相等。这是因为当我们将对象存储在基于哈希的数据结构中(如 HashMap、HashSet 等)时,这些数据结构会使用对象的 hashCode 值来确定对象在内部数据结构中的位置。
如果我们只重写了 equals 方法而没有重写 hashCode 方法,那么当我们将对象存储在哈希数据结构中时,可能会导致对象无法正确地被查找或删除。这是因为默认情况下,Object 类中的 hashCode 方法使用的是对象的内存地址,而不是基于对象属性的计算结果。
因此,为了保证对象在哈希数据结构中的正确行为,我们需要同时重写 equals 和 hashCode 方法,使得它们在判断对象相等性时保持一致。这样可以确保如果两个对象通过 equals 方法被判断为相等,它们的 hashCode 值也会相等,从而保证哈希数据结构的正确性。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)