什么时候需要在使用hashmap时覆盖hashcode()和equals()

时间:2018-02-25 13:23:35

标签: java

我在这个问题上挣扎了很长一段时间了。我知道如果你使用hashset,你必须覆盖hashcode和equals,如果你正在处理不同于String的对象(相同的字符串我猜有相同的hashcode),并选择要考虑的属性,所以这些对象是唯一的属性。

但是什么是与hashmap的交易?你需要什么时候需要覆盖hashcode()和equals()?我很确定你会因为这个问题而撕裂我,但如果有人向我解释,我会非常高兴。明天我有重要的考试,这真的让我很困扰!

我特别要求哈希图!对于hashset,我想我理解这个想法。我还读到了hashcode()和hashfunction

1 个答案:

答案 0 :(得分:1)

答案是肯定的。

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

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