Java文档TreeSet
包含神秘的断言:“一个TreeSet
的行为是明确的,即使它的排序是严格部分,只不过没有遵守Set接口的常规协定。 “我想知道当Comparable.compareTo()
被定义为任何一对元素时,如何提供部分有序的元素,因此暗示总和关系(如果总关系是自反的,反对称的和传递的,那么它是总的顺序)。TreeSet的
TreeSet的
回答
我没有找到有关JavaDoc的“部分” 5
红黑树作品,TreeSet实现:在没有与“部分”的任何信息。
您确定您正在阅读java.util.TreeSet?
它显示为:“集合的行为定义良好,即使它的排序是**不一致**与等于;它只是不服从Set接口的总体合同。' – jefflunt
我不认为Google搜索“TreeSet”和阅读描述可以让我陷入这种麻烦。获得的经验:注意版本。 –
它是否是“全部订单”取决于.compareTo()
的实施情况。我们假设你将一个列表Integers
排序为一棵树,但不是用精确的数值比较它们,而是想把所有的数字都分成100块。所以,你会认为数字0-99彼此相等,100-199彼此相等,200-299彼此相等。您可以通过将Integer
值加100,然后比较THAT结果来做到这一点。因此,所有数字0-99都小于全部数字100-199,但是5 == 43
和172 == 121
就.compareTo()
方法而言,因为在比较之前所有值都除以100。
因为在这个例子中5 == 43
那么5可能会在43之前,或43之前43,因此它们是部分排序的,但TreeSet的行为保持不变,因为它使用.compareTo()
来构建树。
您可以使用偏序排序将基本上分组的东西组合成更大的块,即使总的自然排序不是由排序产生的。
对于部分比较,您需要四值退货:”<","=",">“ ,和“未定义” –
- 1. 去除TreeSet的
- 2. Java - TreeSet和hashCode()
- 3. TreeSet/Contains方法
- 4. TreeSet与树
- 5. 的Java TreeSet中的地图
- 6. TreeSet操作的复杂性
- 7. JavaEE的TreeSet中引起org.hibernate.TransientPropertyValueException
- 8. 迭代TreeSet的 - 从树状
- 9. 访问treeset中的元素
- 10. TreeSet中的排名元素
- 11. compareTo和TreeSet的问题
- 12. 解组JAXB中的TreeSet
- 13. 为什么TreeSet声明TreeSet <E>而不是TreeSet <E extends Comparable <E>>
- 14. TreeSet或TreeMap - 按指令
- 15. 嵌套TreeSet迭代器 - Java
- 16. java.util.ConcurrentModificationException在迭代过TreeSet中
- 17. 将TreeSet转换为ArrayList?
- 18. TreeSet和等于函数
- 19. 如何使用CompareTo()和TreeSet()
- 20. 在Hadoop DistributedCache上存储TreeSet
- 21. TreeSet中以降序排列
- 22. 在TreeSet中交换密钥?
- 23. TreeSet vs Arraylist:修改元素
- 24. Java的TreeSet的行为设定
- 25. TreeSet类型的remove()方法返回
- 26. 添加到TreeSet时的录制位置
- 27. 如何获得TreeSet的逆映射
- 28. treeset中的多个覆盖java
- 29. TreeMap的entrySet()是否返回TreeSet
- 30. 无法使用TreeSet中的contains()方法
没有提及partial http://download.oracle.com/javase/6/docs/api/java/util/TreeSet.html –
看来引用来自旧版本的Java,如v1.2左右:http://www.google.com/search?q="well-defined+even+if+its+ordering+is+strictly+partial“ – Nayuki