Java 如果我重写.equals(),即使我没有';你不使用HashMap吗?

Java 如果我重写.equals(),即使我没有';你不使用HashMap吗?,java,Java,如果我选择从不将对象存储在集合中,我是否需要重写哈希代码,或者可以为我的对象使用相同的哈希代码?这对性能是好是坏 不,您应该提供哈希代码。你永远不知道明天,你可能需要在那里使用它不,你应该提供哈希代码。你永远不知道明天,你可能需要在那里使用它任何时候你重写hashcode,你也需要重写equals。Hashcode必须返回与equals返回true的值相同的比较值,否则hashmaps将无法正常工作 对。如果可以改进默认实现,请重写hashcode。任何时候重写hashcode都需要重写equa

如果我选择从不将对象存储在集合中,我是否需要重写哈希代码,或者可以为我的对象使用相同的哈希代码?这对性能是好是坏

不,您应该提供哈希代码。你永远不知道明天,你可能需要在那里使用它

不,你应该提供哈希代码。你永远不知道明天,你可能需要在那里使用它

任何时候你重写hashcode,你也需要重写equals。Hashcode必须返回与equals返回true的值相同的比较值,否则hashmaps将无法正常工作


对。如果可以改进默认实现,请重写hashcode。

任何时候重写hashcode都需要重写equals。Hashcode必须返回与equals返回true的值相同的比较值,否则hashmaps将无法正常工作


对。如果可以改进默认实现,请重写哈希代码。

这不是绝对必要的,但如果以后决定存储和排序对象,则最好这样做。

这不是绝对必要的,但是,如果您以后决定存储和排序对象,则最好这样做。

如果您总是覆盖这些方法,您将不会花费太多精力,更现代的IDE为您提供此功能

如果您总是覆盖这些方法,您将不会花费太多精力,更为现代的IDE为您提供了此功能

这是绝对必要的吗?没有

这是最佳实践吗?对


如果你在6个月内不这样做,它会回来咬你吗?也许吧。

这是绝对必要的吗?没有

这是最佳实践吗?对

如果你在6个月内不这样做,它会回来咬你吗?可能吧。

如果
A.equals(B)
,那么
A.hashCode()==B.hashCode()
必须为真

如果
!A.equals(B)
尽管如此,
A.hashCode()==B.hashCode()
仍然可以为真

如果在重写
equals()
时不重写
hashCode()
,那么将对象放入某些集合实际上会丢失对象(它们不会检索)。因此,要么正确重写
hashCode()
,要么将其重写为
return1
。这将满足约束并正常工作,但如果您开始将大量约束放入基于哈希的集合中,则会对性能造成严重影响。

如果
a.equals(B)
,则
a.hashCode()==B.hashCode()
必须为真

如果
!A.equals(B)
尽管如此,
A.hashCode()==B.hashCode()
仍然可以为真

如果在重写
equals()
时不重写
hashCode()
,那么将对象放入某些集合实际上会丢失对象(它们不会检索)。因此,要么正确重写
hashCode()
,要么将其重写为
return1
。这将满足约束并正常工作,但如果您开始将大量约束放入基于哈希的集合中,则会严重影响性能。

要解决这一点:

这对性能是好是坏

要么你需要,要么你不需要。如果你需要它,你别无选择。如果不这样做,它将永远不会被调用。

要解决这一点:

这对性能是好是坏

要么你需要,要么你不需要。如果你需要它,你别无选择。如果你不这样做,它将永远不会被调用;这是任何课程的合同

如果您觉得太懒了,无法实现一个像样的
hashCode
方法,那么您仍然可以遵守此实现的约定:

  @Override public int hashCode() {
    return 0;
  }
它在基于散列的集合中性能很差,但至少是正确的;这是任何课程的合同

如果您觉得太懒了,无法实现一个像样的
hashCode
方法,那么您仍然可以遵守此实现的约定:

  @Override public int hashCode() {
    return 0;
  }

它在基于散列的集合中性能很差,但至少是正确的。

其他一些人提到只返回一个常量值。如果您忘记并将其放入基于散列的集合中,这可能会在以后的性能问题上导致一些混乱。我会考虑抛出一个不支持的操作异常,这样如果你以后想使用它,你会发现很快,所以你可以继续做一个正确的实现。

< P>一些其他人刚刚提到返回一个常量值。如果您忘记并将其放入基于散列的集合中,这可能会在以后的性能问题上导致一些混乱。我会考虑抛出一个不支持的操作异常,这样如果你以后想使用它,你会发现很快,所以你可以继续做一个正确的实现。

如果你确信在任何基于哈希的集合中,这个对象将来永远不会被使用,你就不需要重写哈希代码。这对性能也没有任何影响。但是,将它们一起重写是一种很好的做法,这样就可以遵守该方法公开的契约程序员在面临决策时经常会问的第一件事是什么?如果您确信该对象将来永远不会在任何基于哈希的集合中使用,则不需要重写哈希代码。这对性能也没有任何影响。然而,一个好的做法是将它们一起重写,以便遵守该方法所揭示的契约。为什么程序员在面临决策时首先问的问题中“它如何影响性能”如此频繁?这是有史以来最好的回答。此外,这一评论也是有史以来最疯狂的回应。此外,此评论是垃圾邮件