2011-10-07 32 views
0

Java文檔TreeSet包含神祕的斷言:「一個TreeSet的行爲是明確的,即使它的排序是嚴格部分,只不過沒有遵守Set接口的常規協定。 「我想知道當Comparable.compareTo()被定義爲任何一對元素時,如何提供部分有序的元素,因此暗示總和關係(如果總關係是自反的,反對稱的和傳遞的,那麼它是總的順序)。TreeSet的

+2

沒有提及partial http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html –

+1

看來引用來自舊版本的Java,如v1.2左右:http://www.google.com/search?q="well-defined+even+if+its+ordering+is+strictly+partial「 – Nayuki

回答

-2

我沒有找到有關JavaDoc的「部分」 5

紅黑樹作品,TreeSet實現:在沒有與「部分」的任何信息。

您確定您正在閱讀java.util.TreeSet

+1

它顯示爲:「集合的行爲定義良好,即使它的排序是**不一致**與等於;它只是不服從Set接口的總體合同。' – jefflunt

+0

我不認爲Google搜索「TreeSet」和閱讀描述可以讓我陷入這種麻煩。獲得的經驗:注意版本。 –

-2

它是否是「全部訂單」取決於.compareTo()的實施情況。我們假設你將一個列表Integers排序爲一棵樹,但不是用精確的數值比較它們,而是想把所有的數字都分成100塊。所以,你會認爲數字0-99彼此相等,100-199彼此相等,200-299彼此相等。您可以通過將Integer值加100,然後比較THAT結果來做到這一點。因此,所有數字0-99都小於全部數字100-199,但是5 == 43172 == 121.compareTo()方法而言,因爲在比較之前所有值都除以100。

因爲在這個例子中5 == 43那麼5可能會在43之前,或43之前43,因此它們是部分排序的,但TreeSet的行爲保持不變,因爲它使用.compareTo()來構建樹。

您可以使用偏序排序將基本上分組的東西組合成更大的塊,即使總的自然排序不是由排序產生的。

+1

對於部分比較,您需要四值退貨:」<","=",">「 ,和「未定義」 –