java - 使用 hashmap 时什么时候需要重写 hashcode() 和 equals()

标签 java

我在这个问题上挣扎了一段时间。我知道,如果您使用哈希集,如果您处理的对象与 String 不同(我猜相同的字符串具有相同的哈希码),则必须覆盖 hashcode 和 equals,并选择要考虑的属性,因此对象是唯一的属性(property)。

但是 hashmap 是怎么回事呢?您是否需要以及何时需要重写 hashcode() 和 equals() ?我很确定你会因为这个问题而让我心碎,但如果有人向我解释,我会非常高兴。明天我有重要的考试,这真的让我很烦恼!

我特别要求 HashMap !对于哈希集,我想我理解这个想法。我还阅读了有关 hashcode() 和 hashfunction 的内容

最佳答案

答案是肯定的。

在 Java 中,您可以在集合中添加对象。假设您想要找到一个名为 A 的对象,并将其添加到名为 L 的列表中。假设这是您使用自己的类定义的对象,并且您重写了方法 Object#equals()。当您循环遍历列表 L 时,您正在测试这些对象中的任何一个是否等于对象 A。如果 equals 方法返回 true,则您已找到对象。

当您将对象添加到任何 HashTable、HashMap 或 HashSet 时,哈希码方法将用于生成数字。该数字应该尽可能唯一。同一类的对象可能在其实例字段中具有不同的值,但它们的 hashcode 方法产生相同的值。如果您有某个类的两个对象 X 和 Y,并且它们具有相同的哈希码,并且您将它们都放入 HashMap Q 中,那么它们最终会位于同一个存储桶 P 中。假设 P 有两个对象。假设您将 Q 传递给具有 X 和 Y 的方法。该方法想要检查 Q 中是否存在 X。Q 将获取 X 并获取哈希码。 Q 将使用哈希码来查找存储桶。桶将是P。桶P有两个对象。这是使用 equals 方法通过将桶中的每个对象与 X 进行比较来确定桶中是否包含 X。如果桶中的某个对象与 X 匹配,则 X 存在于 Q 中。

关于java - 使用 hashmap 时什么时候需要重写 hashcode() 和 equals(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48973941/

相关文章:

java - if statement hack,有没有更好的方法来写这个?

Java:检查非堆内存使用情况

java - 无法使用 Eclipse 连接到 Google Cloud SQL

java - 聊天应用程序问题

Java计算无效结果

java - 使用现有 GoogleMap API 的 Android MapView

java - twain 扫描仪部分扫描

java - 递归遍历 json,向每个对象添加名称/值对

java - 如何使用有限的 logcat 调试(这个?)StackOverflowError?

java - 重新加载 Vaadin 应用程序