与集合相等且可比

与集合相等且可比,第1张

集合相等且可比

似乎这在(粗体的)JavaDoc中有

TreeSet
很好的记录:

注意,如果要正确实现接口,则由一个集合(无论是否提供显式比较器)维护的顺序
必须与equals一致

Set
。(请参见
Comparable
Comparator
对于与equals一致的精确定义。)之所以如此,是因为
Set
接口是根据
equals
*** 作定义的,但是
TreeSet

实例使用其
compareTo
(或compare)方法执行所有元素比较
,因此两个元素被视为相等从集合的角度来看,此方法是相等的。
集合的行为是明确定义的,即使其顺序与equals不一致也是如此; 它只是不能遵守
Set
接口的一般约定


这是唯一实现

Comparable
但与不一致的(?)JDK类的示例
equals()

Set<BigDecimal> decimals = new HashSet<BigDecimal>();decimals.add(new BigDecimal("42"));decimals.add(new BigDecimal("42.0"));decimals.add(new BigDecimal("42.00"));System.out.println(decimals);

decimals
在最后有三个值,因为
42
42.0
并且
42.00
是不相等的,只要
equals()
关注。但是,如果将其替换
HashSet
TreeSet
,则结果集仅包含一项(
42
-刚好是第一个添加的项),因为使用进行比较时,它们都被认为是相等的
BigDecimal.compareTo()

这表明在使用与不一致的类型时

TreeSet
,这以“ 损坏 ” 的方式出现
equals()
。它仍然可以正常工作,并且所有 *** 作都定义明确-
只是不遵守
Set
类的约定-如果两个类不是
equal()
,则它们不会被视为重复。

也可以看看
  • 比较等于等于是什么意思?如果我的课堂不遵循这一原则,可能会发生什么?


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5490025.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-13

发表评论

登录后才能评论

评论列表(0条)

保存