重写equals为什么要重写hashcode
时间: 2023-04-28 10:00:16 浏览: 66
重写`equals`方法和重写`hashCode`方法是Java中对象比较和哈希存储相关的操作,它们必须成对出现。
当两个对象通过`equals`比较返回`true`时,它们的`hashCode`必须相等。如果不重写`hashCode`,可能会出现两个相等的对象有不同的哈希值的情况,这会导致在哈希表(比如`HashMap`)中查询不到正确的对象。
因此,为了保证对象的正确比较和存储,当你重写`equals`方法时,一定要重写`hashCode`方法。
相关问题
为什么重写equals要重写hashcode
在Java中,equals方法用于比较两个对象是否相等,而hashCode方法则用于获取对象的哈希值。哈希值是将任意长度的数据映射到固定长度的数据的一种技术。在Java中,哈希值通常用于散列表(如HashMap、HashSet等)中存储和查找对象。
如果重写了equals方法而没有重写hashCode方法,那么在使用散列表时,可能会出现问题。因为散列表在存储对象时,是根据对象的hashCode值来进行存储的,如果两个对象的equals方法返回true,但它们的hashCode值不同,那么它们将被散列表存储为两个不同的对象,这就违反了散列表的基本原则。
因此,如果重写了equals方法,就应该同时重写hashCode方法,以保证在散列表中对象的存储和查找能够正常工作。在重写hashCode方法时,应该保证相等的对象具有相同的hashCode值,这样才能保证它们在散列表中被正确存储。
重写equals为什么还要重写hashcode
重写equals方法是为了比较两个对象的内容是否相等,而重写hashcode方法是为了让这两个对象在放入哈希表等数据结构中能够被正确地识别和查找。因为哈希表等数据结构是根据对象的hashcode值来进行存储和查找的,如果两个对象的内容相等但是hashcode值不同,那么它们就会被存储在不同的位置,导致查找时无法正确找到。因此,重写equals方法时也需要同时重写hashcode方法。