部分有序元素的TreeSet

时间:2011-10-07 01:23:48

标签: java

Java doc TreeSet包含神秘的断言:“ TreeSet的行为定义明确,即使其排序严格部分;它也未能遵守Set接口的一般契约。“我想知道在为任何一对元素定义Comparable.compareTo()时如何提供部分有序元素,因此暗示关系(如果总关系是反身的,反对称的和传递的,则它是总的顺序)。

2 个答案:

答案 0 :(得分:-2)

它是否是“总订单”取决于.compareTo()的实施情况。

假设您正在将列表Integers排序到树中,但不是通过精确的数值比较它们,而是希望将所有数字组合成100个块。因此,您会认为数字0-99相等相互之间,100-199彼此相等,200-299彼此相等。您可以将Integer值设为100,然后比较该结果。因此,所有数字0-99都小于所有数字100-199,但5 == 43172 == 121.compareTo()方法而言,因为所有值除以100之前都是比较。

因为,在这个例子中,5 == 43然后5可以在43之前,或者在5之前的43之前 - 因此,它们被部分排序,但TreeSet的行为保持不变,因为它使用{{1}构建树。

您可以使用部分排序将事物基本上组合成更大的块,即使总排序不是由排序产生的。

答案 1 :(得分:-2)

我在JavaDoc 5中找不到关于'partial'的任何信息。

红黑树适用于TreeSet实现,它与“部分”没有任何关系。

您确定要阅读 java.util.TreeSet 吗?