Java TreeSet包含了一个神秘的断言:“TreeSet的行为是定义良好的,即使它的排序严格地是partial__;它只是没有遵守Set接口的一般契约。”当对任意一对元素定义Comparable.compareTo()时,我想知道如何才能提供偏序元素,从而暗示了总关系(如果全关系是自反的、反对称的和可传递的,那么它就是全序的)。
发布于 2011-10-07 01:36:02
我在JavaDoc 5中找不到任何关于“部分”的信息。
红色-黑色树为TreeSet实现工作,该实现没有任何“部分”。
你确定你在读java.util.TreeSet吗?
发布于 2011-10-07 01:33:49
它是否是“总顺序”取决于.compareTo()的实现。
假设您正在将一个列表Integers排序到一棵树中,但是与其用精确的数值进行比较,不如将所有的数字分组为100。所以,你会认为数字0-99是相等的,100-199是相等的,200-299是相等的。您可以通过将Integer值取100,然后比较结果来做到这一点。因此,所有数字0-99都小于所有数字100-199,但就5 == 43和172 == 121方法而言,由于所有值除以100,然后再进行比较。
因为在这个例子中,5 == 43 5可能在43之前,或者43在5之前--因此,它们是部分有序的,但是TreeSet的行为保持不变,因为它使用.compareTo()来构建树。
您可以使用偏序来将事物组合成更大的块,即使排序不会产生总的、自然的排序。
https://stackoverflow.com/questions/7682208
复制相似问题