Java 在使用hashmap时,何时需要重写hashcode()和equals()

Java 在使用hashmap时,何时需要重写hashcode()和equals(),java,Java,我在这个问题上挣扎了很长一段时间。我理解如果你使用hashset,你必须重写hashcode和equals,如果你处理的对象不同于StringSame strings,我猜相同的strings有相同的hashcode,并选择要考虑的属性,因此该属性的对象是唯一的 但是hashmap的交易是什么?您是否需要以及何时需要重写hashcode和equals?我敢肯定你会因为这个问题把我撕碎,但如果有人向我解释,我会非常高兴。明天我要参加一个重要的考试,这真的让我很烦恼 我特别要求提供hashmaps!

我在这个问题上挣扎了很长一段时间。我理解如果你使用hashset,你必须重写hashcode和equals,如果你处理的对象不同于StringSame strings,我猜相同的strings有相同的hashcode,并选择要考虑的属性,因此该属性的对象是唯一的

但是hashmap的交易是什么?您是否需要以及何时需要重写hashcode和equals?我敢肯定你会因为这个问题把我撕碎,但如果有人向我解释,我会非常高兴。明天我要参加一个重要的考试,这真的让我很烦恼

我特别要求提供hashmaps!对于hashset,我想我理解这个想法。我也读过关于hashcode和hashfunction的文章,答案是肯定的

在Java中,可以在集合中添加对象。假设您想找到一个名为A的对象,该对象添加到名为L的列表中。假设这是一个您用自己的类定义的对象,您重写了Objectequals方法。当您在列表L中循环时,您正在测试这些对象中是否有任何对象等于对象A。如果equals方法返回true,您就找到了您的对象


向任何哈希表、HashMap或HashSet添加对象时,hashcode方法用于生成数字。该数字应尽可能唯一。同一类的对象可能在其实例字段中具有不同的值,但其hashcode方法生成相同的值。如果你有某个类的两个对象X和Y,它们有相同的hashcode,你把它们都放在一个HashMap Q中,它们最后都在同一个bucket P中。让我们假设P有两个对象。假设您将Q传递给一个带有X和Y的方法。该方法想要检查Q中是否存在X。Q将接受X并获得hashcode。Q将使用hashcode查找一个bucket。铲斗将为P。铲斗P有两个对象。这是指使用equals方法通过比较Bucket中的每个对象与X来确定Bucket中是否包含X。如果Bucket中的一个对象与X匹配,则Q中存在X。

关于HashSet的答案如何不适用于您的问题?请注意,如果答案解决了该问题,则一个问题与另一个问题重复,如果这两个问题是相同的,那么我必须100%重写hashmap中的hashcode和equals?不确定要使用哪个属性then@GeorgiMichev另见:我还是不明白。。假设我在类中使用generate hashcode和equals,当我在hashmap中有来自该类的对象时。我决定在选项中标记哪些属性?