比较函数,它对某些对象集合施加总排序 。 可以将比较器传递给排序方法(例如或 ),以便精确控制排序顺序。 比较器还可用于控制某些数据结构的顺序(例如或 ),或者为没有的对象集合提供排序。比较器对一组元素施加的排序被认为与等号一致,当且仅当具有与 ( 和在中的相同的布尔值时。
当使用能够强加与equals不一致的排序的比较器来排序有序集(或有序映射)时,应该谨慎行事。 假设具有显式比较器的有序集(或有序映射)与从集合提取的元素(或键) 。 如果对的排序与equals不一致,则排序集(或有序映射)将表现得“奇怪”。 特别是有序集(或有序映射)将违反集合(或映射)的一般合同,其定义为 。
例如,假设有两个元素和 ,使为空 ,比较器为 。 第二个操作将返回true(并且树集的大小将增加)因为和在树集的视角中不相等,即使这与方法的规范相反。
注意:这通常是一个好主意比较,也能实现 ,因为它们可能被用来作为排序的序列化数据结构的方法(如 , )。 为了使数据结构成功序列化,比较器(如果提供)必须实现 。
对于数学上的倾斜,即限定了施加顺序给定的比较器的关系 上一组给定对象强加是:
{(x, y) such that c.compare(x, y) <= 0}.
此总订单的商是:
{(x, y) such that c.compare(x, y) == 0}.
它从合同紧跟 ,该商数是一个等价关系 ,并且实行排序是全序 。
当我们说对施加的排序与equals一致时 ,我们的意思是排序的商是由对象' 方法定义的等价关系:
{(x, y) such that x.equals(y)}.
与不同,比较器可以选择允许比较空参数,同时保持对等关系的要求。
此界面是Java Collections Framework的成员。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/6283.html