如果我不在java中对对象使用哈希表或哈希集,是否需要实现hashcode()

如果我不在java中对对象使用哈希表或哈希集,是否需要实现hashcode(),java,hash,hashtable,equals,hashcode,Java,Hash,Hashtable,Equals,Hashcode,考虑这一理论情景: 我有一个人班。我不会对该对象执行任何查找操作。 我将在数组、列表中使用它们,但不在集合和地图中使用它们。 但我想检查两个person对象列表是否相等 例如: List<Person> list1 = new ArrayList<>(); List<Person> list2 = new ArrayList<>(); List list1=new ArrayList(); List list2=新的ArrayList(); 如

考虑这一理论情景:

我有一个
班。我不会对该对象执行任何
查找
操作。 我将在
数组
列表
中使用它们,但不在
集合
地图
中使用它们。 但我想检查两个
person对象列表是否
相等

例如:

List<Person> list1 = new ArrayList<>();
List<Person> list2 = new ArrayList<>();
List list1=new ArrayList();
List list2=新的ArrayList();
如果我想检查这些列表是否相等,
System.out.println(list1.equals(list2))

我必须在我的
Person
类中实现
equals
方法。我是否仍然需要实现
Hashcode()
。 我没有将
我的
个人
对象散列到bucket中(仅此我需要
Hashcode()

因此,我认为可能没有必要

如果要覆盖
equals
,那么实现
hashCode
是一种最佳实践。即使您现在可能不使用它们作为键,但将来可能会使用它们。如果您将这个类提供给其他人使用,那么您不知道他们将如何使用它


我建议你改变它,当你改变一个来改变另一个的时候,把它变成一种习惯。从长远来看,它将帮助您解决问题。

如果您要覆盖
equals
,那么实现
hashCode
是一种最佳做法。即使您现在可能不使用它们作为键,但将来可能会使用它们。如果您将这个类提供给其他人使用,那么您不知道他们将如何使用它


我建议你改变它,当你改变一个来改变另一个的时候,把它变成一种习惯。从长远来看,它将帮助您解决问题。

如果您要覆盖
equals
,那么实现
hashCode
是一种最佳做法。即使您现在可能不使用它们作为键,但将来可能会使用它们。如果您将这个类提供给其他人使用,那么您不知道他们将如何使用它


我建议你改变它,当你改变一个来改变另一个的时候,把它变成一种习惯。从长远来看,它将帮助您解决问题。

如果您要覆盖
equals
,那么实现
hashCode
是一种最佳做法。即使您现在可能不使用它们作为键,但将来可能会使用它们。如果您将这个类提供给其他人使用,那么您不知道他们将如何使用它



我建议你改变它,当你改变一个来改变另一个的时候,把它变成一种习惯。从长远来看,它将帮助您解决问题。

您确定没有人会尝试将其添加到集合或地图中吗?你怎么能肯定?只要没有人这样做,你就应该没事。
hashCode()
的契约规定:“如果根据equals(Object)方法,两个对象相等,那么对这两个对象中的每一个调用hashCode方法必须产生相同的整数结果。”。如果您正在实现
equals()
,而不是
hashCode()
,则很可能违反了该约定。@GriffeyDog:感谢您指出我已经知道的约定。但如果违反合同,将妨碍上述情景中的
等于
。我同意这是最好的实践来实现这两个目标。但这只是一个理论场景。你确定没有人会尝试将其添加到集合或地图中吗?你怎么能肯定?只要没有人这样做,你就应该没事。
hashCode()
的契约规定:“如果根据equals(Object)方法,两个对象相等,那么对这两个对象中的每一个调用hashCode方法必须产生相同的整数结果。”。如果您正在实现
equals()
,而不是
hashCode()
,则很可能违反了该约定。@GriffeyDog:感谢您指出我已经知道的约定。但如果违反合同,将妨碍上述情景中的
等于
。我同意这是最好的实践来实现这两个目标。但这只是一个理论场景。你确定没有人会尝试将其添加到集合或地图中吗?你怎么能肯定?只要没有人这样做,你就应该没事。
hashCode()
的契约规定:“如果根据equals(Object)方法,两个对象相等,那么对这两个对象中的每一个调用hashCode方法必须产生相同的整数结果。”。如果您正在实现
equals()
,而不是
hashCode()
,则很可能违反了该约定。@GriffeyDog:感谢您指出我已经知道的约定。但如果违反合同,将妨碍上述情景中的
等于。我同意这是最好的实践来实现这两个目标。但这只是一个理论场景。你确定没有人会尝试将其添加到集合或地图中吗?你怎么能肯定?只要没有人这样做,你就应该没事。
hashCode()
的契约规定:“如果根据equals(Object)方法,两个对象相等,那么对这两个对象中的每一个调用hashCode方法必须产生相同的整数结果。”。如果您正在实现
equals()
,而不是
hashCode()
,则很可能违反了该约定。@GriffeyDog:感谢您指出我已经知道的约定。但如果违反合同,将妨碍上述情景中的等于。我同意这是最好的实践来实现这两个目标。但这是一个理论场景当然,我同意这是一个很好的实践。但由于这是一个面试问题,我想知道正确的答案这是一个很好的经验法则。Apache提供了一个
HashCodeBuilder
(),使编写
hashCode
方法变得简单。他们还有一个
EqualsBuilder
()“最佳实践”是另一种说法,“如果可以避免的话,不要做任何会让其他程序员感到惊讶的事情。”惊喜是等待发生的bug。覆盖equals()但不覆盖n