我使用了一个带有自编写比较器的TreeSet.现在,当我向TreeSet添加元素并且Comparator的compare方法返回0时,看起来TreeSet只包含一个具有相同排名的Object.
我没有看到javadocs中记录了这种行为.也许我想念一些东西.你能证实这种行为吗?
我编辑了比较器.现在它永远不会返回0并且TreeSet包含具有相同排名的所有对象.
如果我想要多个具有相同排名的对象,那就是它必须的样子吗?
是的,这在JavaDoc for TreeSet中有记录:
请注意,由集合维护的排序(无论是否提供显式比较器)必须与
equals
是否正确实现Set
接口一致.(请参阅Comparable
或Comparator
了解与之一致的精确定义equals
.)这是因为Set
接口是根据equals
操作定义的 ,但是TreeSet
实例使用其compareTo
(或compare
)方法执行所有元素比较,因此通过此方法认为两个元素相等从集合的角度来看,是平等的.集合的行为即使其排序不一致也是明确定义的equals
; 它只是不遵守Set
界面的一般合同.(强调我的)
归档时间: |
|
查看次数: |
460 次 |
最近记录: |