我已经很好地理解了Comparable和Comparator接口之间的区别,以及它们强加的顺序。
此外,我很清楚为什么compareTo必须与equals方法一致。从Oracle文档,
强烈建议(尽管不是必需的)自然顺序与相等一致。这是因为没有显式比较器的排序集(和排序映射)在与自然顺序与等号不一致的元素(或键)一起使用时表现“奇怪”。特别是,这种排序集合(或排序映射)违反了集合(或映射)的一般契约,该契约是根据等方法定义的。
例如,如果添加两个键a
和b
,则(!a.equals(b)
然而,我无法澄清以下段落,
对于具有数学倾向的类,定义给定类C上自然顺序的关系为:
{(x, y) such that x.compareTo(y) <= 0}.
这个总顺序的商是:
{(x, y) such that x.compareTo(y) == 0}.
从
compareTo
的契约中,商是C上的等价关系,自然顺序是C上的总顺序。当我们说一个类的自然排序与等于一致时,我们的意思是自然排序的商是由类的equals(Object)
方法定义的等价关系:
{(x, y) such that x.equals(y)}.
作者在这里试图提出什么建议?。有人能用一个简单的例子来解释吗。
都是数学!(x, y)指"x与y有关"
等价关系是反映、对称和过渡的元素集合(在本例中为C类实例)上的关系。
反射方式:每个元素与自身相关对称方式:如果a与b相关,则b与过渡方式相关:如果a与b相关,且b与c相关,则a与c相关。
因此,x.compareTo(y)==0的商关系对于c:c的每个实例c是等价关系。compareTo(c)假设为零,对于c:if c1的每个实例c1,c2。比较(c2)==0,然后是c2。compareTo(c1)也应为零。对于所有c1,c2,c3,其中c1。比较(c2)是零和c2。比较器(c3)为零,然后为c1。compareTo(c3)也应为零。
总的顺序是一种关系,它是传递的(见上文)、反对称的(同样见上文,但现在它是反对称的)和总的,因此compareTo应该反映总的顺序:如果A.compareTo(b)是
总数是指a.compare至(b)
商来自a.compareTo(b)
我希望这是一个比原来更解释。。。
假设你创建了这个愚蠢的类
public class A implements Comparable<A> {
private int value;
public A(int value){
this.value = value }
public boolean equals(Object obj){
if (obj instanceof A)
return this.value = ((A)obj).value;
else return false;
}
public int compareTo(A another){
return 0;
}
}
然后创建两个实例:
A a1 = new A(3);
A a2 = new A(4);
SortedSet<A> set = new TreeSet<A>();
set.add(a1);
set.add(a2);
SortedSet接受a1,但不接受a2,因为a1。等于(a2)=假,但等于a2。比较(a2)==0;记住,在定义集合中,所有元素都是彼此不同的(就像集合的数学概念)。
基本上,它是说与equals一致意味着(x
,y
)对的集合x.compareTo(y)==0
为true
,与x
,y
为true
的(x
)对的集合相同。
这与第一段中使用的与等于一致的常识性理解没有什么不同。它只是用形式代数的方式来表达定义。我肯定有人认为把它添加到文档中会很有趣,但是我不确定它对程序员有什么实际的用处。
问题内容: 我与hibernate和甲骨文一起工作 我使用此代码: 我想用postgreSQL做同样的事情 但是PostgreSQL不支持’FROM dual’语法 我想知道PostgreSQL 中 Dual的 等效性 问题答案: 您根本不需要子句。只是会做。
这个问题已经发布了等价的api测试依赖在Gradle?但我看不出有什么解决办法。 我们声明的依赖项很少,如下所示 我们想把这些暴露给这个库的消费者。由于是testImplementation,消费者需要显式地声明这些依赖关系,而这些依赖关系是我们想要避免的。
问题内容: 有没有一种优雅的方法可以在MySQL数据库中进行高性能的自然排序? 例如,如果我有此数据集: 最终幻想 最终幻想4 最终幻想10 最终幻想12 最终幻想12:爱情之链 最终幻想冒险 最终幻想起源 最终幻想战术 除了将游戏名称拆分成各个组成部分外,其他任何 优雅的 解决方案 标题 :《最终幻想》 编号 :“ 12” 副标题 :“ Promathia的链条” 确保它们以正确的顺序出现?(1
我正在使用FindBug,我想了解由它生成的.xml报告用于文档目的。 我找不到任何资料提到他们之间的关系。 我参考了FindBugs Bug描述和FindBugs2站点,这个问题没有一个明确的答案 我们似乎有几个类别, null null
我无法设置任何内容:或其他内容,包括和。是否可以从主机访问名称和?似乎无法设置中的变量...请帮我确定我遗漏了什么,提前谢谢
GCP的云存储API上有一种方法,允许调用方检索对象元数据。记录于https://cloud.google.com/storage/docs/json_api/v1/objects/get 是否有与此方法等效的?我尝试过但是它返回的信息比调用API方法更多。 我的问题的背景是,我正在实现一个自定义角色,以对GCS存储桶/对象应用权限。为了测试该自定义角色,我正在编写一个脚本,该脚本执行该自定义角色