可变集合是否应该重写equals和hashCode?

fre*_*low 24 java collections overriding equals hashcode

我只是想知道覆盖equalshashCode可变集合是否是一个好主意.这意味着如果我将这样的集合插入a HashSet然后修改集合,HashSet则将无法再找到该集合.这是否意味着,只有永恒不变的藏品应该重写equalshashCode,或者是这种滋扰Java程序员简单地生活?

mgr*_*ber 5

你应该覆盖equals,hashCode如果你的类应该像一个值类型.这通常不是收藏品的情况.

(我的Java经验并不多.这个答案基于C#.)


duf*_*ymo 5

深度和浅等的问题比Java大; 所有面向对象的语言都必​​须关注它.

添加到集合的对象应该重写equals和hash代码,但是集合接口的抽象实现中内置的默认行为足以满足集合本身的要求.

  • @duffymo:+1 ......但是所有OO语言都没有犯下Java创建者所犯的错误:将*equals*和*hashCode*放在OO层次结构的顶部,就像它有意义一样(它没有' T).应该有一个*Equalable*(只是做了那个)界面或者某些东西'.而且,不,我不是Java仇恨者而是Java狂热者:) (4认同)