java,如果我重写。等于(),是否需要重写。hashCode()即使我不使用HashMap? 2 周,1 日 Questions & Answers 169 如果我选择从不将对象存储在集合中,我是否需要重写哈希代码,或者可以为我的对象使用相同的哈希代码?这对性能是好是坏
# 2 楼答案 如果A.equals(B),则A.hashCode() == B.hashCode()必须为true 如果!A.equals(B)虽然如此,A.hashCode() == B.hashCode()仍然可以为真 如果在重写equals()时不重写hashCode(),那么将对象放入某些集合实际上会丢失对象(它们不会检索)。因此,要么正确地重写hashCode(),要么将其重写为return 1。这将满足约束并正常工作,但如果您开始将大量约束放入基于散列的集合中,则会对性能造成严重影响
# 6 楼答案 Equal objects must have equal hash codes;这是任何课程的合同 如果您觉得太懒了,无法实现一个像样的hashCode方法,那么您仍然可以遵守此实现的约定: @Override public int hashCode() { return 0; } 它在基于散列的集合中的性能很差,但至少是正确的
# 1 楼答案
不,您应该提供哈希代码。你永远不知道明天你可能需要在那里使用它
# 2 楼答案
如果
A.equals(B)
,则A.hashCode() == B.hashCode()
必须为true如果
!A.equals(B)
虽然如此,A.hashCode() == B.hashCode()
仍然可以为真如果在重写
equals()
时不重写hashCode()
,那么将对象放入某些集合实际上会丢失对象(它们不会检索)。因此,要么正确地重写hashCode()
,要么将其重写为return 1
。这将满足约束并正常工作,但如果您开始将大量约束放入基于散列的集合中,则会对性能造成严重影响# 3 楼答案
这不是绝对必要的,但是如果您以后决定存储和排序对象,那么最好这样做
# 4 楼答案
这是绝对必要的吗?没有
这是最佳实践吗?对
如果你在6个月内不这样做,它会回来咬你吗?也许吧
# 5 楼答案
如果您总是重写这些方法,您将不会花费太多精力,更现代的IDE将为您提供此功能
# 6 楼答案
Equal objects must have equal hash codes;这是任何课程的合同
如果您觉得太懒了,无法实现一个像样的
hashCode
方法,那么您仍然可以遵守此实现的约定:它在基于散列的集合中的性能很差,但至少是正确的