Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当我不';在基于哈希的集合中不使用该对象?_Java_Collections - Fatal编程技术网

Java 当我不';在基于哈希的集合中不使用该对象?

Java 当我不';在基于哈希的集合中不使用该对象?,java,collections,Java,Collections,我正在使用向树集添加对象。我从不在任何基于散列的集合中使用它。我觉得树集需要重写compareTo方法等于方法重写不是必需的。不重写equals方法是一种好的做法吗?如果否,那么为什么需要equals方法重写,因为我不会在基于哈希的集合中使用它 更新:javadoc说 强烈建议(x.compareTo(y)==0)=(x.equals(y)),但不是严格要求。一般来说,任何实现可比较接口并违反此条件的类都应该清楚地指出这一事实。建议使用的语言是“注意:此类具有与equals不一致的自然顺序。”

我正在使用向树集添加对象。我从不在任何基于散列的集合中使用它。我觉得树集需要重写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
应该表示的)远不如自然等式常见。