如果我不在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