Java 如果我总是在Comparator.compare()中返回0,为什么我的集合中会有1项?

Java 如果我总是在Comparator.compare()中返回0,为什么我的集合中会有1项?,java,collections,Java,Collections,我为树集编写了一个自定义比较器。为了调试,我决定硬连线“compare()”以始终返回0。令我惊讶的是,有一件物品进入了这个集合 为什么会这样?我正在尽力理解“set.add()”和“compare()”之间的关系。始终返回零意味着所有项与所有其他项相等 这不会阻止您添加单个可能的项。始终返回零表示所有项与所有其他项相等 这不会阻止您添加单个可能的项目。您希望发生什么?为什么?嗯。如果我插入。compare()表示它已经等于某个值,那么它应该阻止插入(我想)。已经等于什么?你觉得它和什么比较?所

我为树集编写了一个自定义比较器。为了调试,我决定硬连线“compare()”以始终返回0。令我惊讶的是,有一件物品进入了这个集合


为什么会这样?我正在尽力理解“set.add()”和“compare()”之间的关系。

始终返回零意味着所有项与所有其他项相等


这不会阻止您添加单个可能的项。

始终返回零表示所有项与所有其他项相等


这不会阻止您添加单个可能的项目。

您希望发生什么?为什么?嗯。如果我插入。compare()表示它已经等于某个值,那么它应该阻止插入(我想)。已经等于什么?你觉得它和什么比较?所以。。。添加();在添加()之前,必须查阅compare();compare()返回0并表示“不,该值已存在于集合中”。因此,如果compare()是硬连接的,总是回答“不,已经在集合中”,那么如何添加任何内容呢?完全错误。如果设置为空,
compare()
将永远不会调用,因为空集不能包含任何内容。您希望发生什么?为什么?嗯。如果我插入。compare()表示它已经等于某个值,那么它应该阻止插入(我想)。已经等于什么?你觉得它和什么比较?所以。。。添加();在添加()之前,必须查阅compare();compare()返回0并表示“不,该值已存在于集合中”。因此,如果compare()是硬连接的,总是回答“不,已经在集合中”,那么如何添加任何内容呢?完全错误。如果集合为空,则永远不会调用
compare()
,因为空集合不能包含任何内容。因此,返回值为零可能意味着两件事情中的一件。被比较的对象是相等的。或者,返回零也可能意味着在调用compare()之前集合为空。因此,即使返回0,仍然会发生插入。否。你完全误解了
compare()
<代码>比较()。如果集合为空,则没有可比较的内容。因此,返回值为零可以表示两件事情中的一件。被比较的对象是相等的。或者,返回零也可能意味着在调用compare()之前集合为空。因此,即使返回0,仍然会发生插入。否。你完全误解了
compare()
<代码>比较()。如果集合为空,则没有可比较的内容。