Java 当我不';在基于哈希的集合中不使用该对象?
我正在使用向树集添加对象。我从不在任何基于散列的集合中使用它。我觉得树集需要重写compareTo方法等于方法重写不是必需的。不重写equals方法是一种好的做法吗?如果否,那么为什么需要equals方法重写,因为我不会在基于哈希的集合中使用它 更新:javadoc说 强烈建议(x.compareTo(y)==0)=(x.equals(y)),但不是严格要求。一般来说,任何实现可比较接口并违反此条件的类都应该清楚地指出这一事实。建议使用的语言是“注意:此类具有与equals不一致的自然顺序。”Java 当我不';在基于哈希的集合中不使用该对象?,java,collections,Java,Collections,我正在使用向树集添加对象。我从不在任何基于散列的集合中使用它。我觉得树集需要重写compareTo方法等于方法重写不是必需的。不重写equals方法是一种好的做法吗?如果否,那么为什么需要equals方法重写,因为我不会在基于哈希的集合中使用它 更新:javadoc说 强烈建议(x.compareTo(y)==0)=(x.equals(y)),但不是严格要求。一般来说,任何实现可比较接口并违反此条件的类都应该清楚地指出这一事实。建议使用的语言是“注意:此类具有与equals不一致的自然顺序。”
老实说,我不理解equals实现的强烈建议背后的原因。最好的做法是始终保持
hashCode()
和equals()
对齐
您不知道下周您可能会在HashMap中使用它,而使用您的类的其他人也会假定它已经完成。最佳做法是始终保持
hashCode()
和equals()
对齐
您不知道下周您可能会在HashMap中使用它,而使用您的类的其他人也会假定它已经完成。重写equals()
与哈希容器无关。这与您是否希望为类定义一个自定义的平等概念有关。如果您重写了compareTo()
,那么您就重写了,因此为了简单的正确性,您应该重写equals()
重写hashCode()
与哈希容器也没有什么关系。它只是碰巧被他们使用,但其他东西也可以使用哈希代码。您应该始终保持hashCode()
与equals()
同步;没有理由不这样做
强烈建议尽量减少意外。如果compareTo()
返回0,那么我希望这两个对象是相等的-如果equals()
不一致,这将非常混乱。重写equals()
与哈希容器无关。这与您是否希望为类定义一个自定义的平等概念有关。如果您重写了compareTo()
,那么您就重写了,因此为了简单的正确性,您应该重写equals()
重写hashCode()
与哈希容器也没有什么关系。它只是碰巧被他们使用,但其他东西也可以使用哈希代码。您应该始终保持hashCode()
与equals()
同步;没有理由不这样做
强烈建议尽量减少意外。如果
compareTo()
返回0,那么我希望这两个对象是相等的-如果equals()
不一致,这将非常混乱。使用equals
而不是=
操作符来比较java对象总是好的,或者说是必要的。因为在equals实现中,可以将对象与其属性值进行比较。而使用==,则只能检查两个引用是否指向同一内存对象
对于散列集合,由于对象检索的复杂性,它变得更加重要 使用
equals
而不是=
操作符来比较java对象总是好的,或者说是必要的。因为在equals实现中,可以将对象与其属性值进行比较。而使用==,则只能检查两个引用是否指向同一内存对象
对于散列集合,由于对象检索的复杂性,它变得更加重要
为什么需要equals方法重写,因为我不会在基于哈希的集合中使用它
需要使用equals
方法来避免。你说你不会在基于散列的集合中使用它;但其他人可能会。我甚至可以说,您自己可能会从TreeSet
更改为HashSet
,而不记得您需要添加相等值
这只是一个原因,一个例子,说明为什么您应该实现equals
,以与compareTo
保持一致。你可以想到其他人,但本质上他们都是指一致性——很直观,如果x.compareTo(y)==0,那么x.equals(y)
为什么需要equals方法重写,因为我不会在基于哈希的集合中使用它
需要使用equals
方法来避免。你说你不会在基于散列的集合中使用它;但其他人可能会。我甚至可以说,您自己可能会从TreeSet
更改为HashSet
,而不记得您需要添加相等值
这只是一个原因,一个例子,说明为什么您应该实现equals
,以与compareTo
保持一致。你可以想到其他人,但本质上他们都是指一致性——很直观,如果x.compareTo(y)==0,那么x.equals(y)
取决于课程-取决于课程-+1,因为如果从今天起一年内可以减少挠头,那么今天的一点努力是非常值得的。特别是在这样的情况下,“正确的事情”大约需要5秒+1,因为如果从今天起一年内减少搔头,那么今天的一点努力是非常值得的。特别是在这样的情况下,“正确的事情”大约需要5秒钟。坦白说,我看不出“平等”存在的理由。为什么equals不能总是“returnthis.compareTo(arg)==0”?因为不是所有类型都有compareTo
。自然总排序(这是compariable.comparieto
应该表示的)远不如自然等式常见。