我有一个关于compareTo函数如何帮助比较器排序的问题,即o1。比较(o2)与o2。比较(o1)
如果两个字符串相等,则此方法返回0,否则返回正值或负值。如果第一个字符串在词典上大于第二个字符串,则结果为正,否则结果为负。
上面的陈述很简单,但是为什么o1.compare(o2)会给我一个升序,而o2.compare(o1)给了我一个降序?
如果我有整数值“5,10,3”,我得到3,5,10和o1。与(o2)相比,后者则相反
String str1 = "Negan";
String str2 = ""; //empty string
//it would return the length of str1 in positive number
str1.compareTo(str2); // 5
//it would return the length of str1 in negative number
str2.compareTo(str1); //-5
按照这个逻辑,使用上面的代码,对于str1.compareTo(str2),我应该有一个升序,其中词汇量较大的数字在后面,但是如果str1作为“”进入,而str2是“尼根”,会发生什么?当1与2比较时,是否设置了某种规则-
编辑:简单地说,返回的值如何确定位置,如果参数是可互换的,并且以二进制形式执行相同的操作。
a.compareTo(b)
如果a,则小于零
也就是说,对其中一个对象调用compareTo,另一个对象作为参数。它的作用是报告“this”对象是否小于/等于/大于“argument”对象。
请注意,a.compareTo(b)
等于-b.compareTo(a)。
现在是比较器<代码>比较器。比较(a,b)应该报告“a”和“b”的顺序,因此必须(对于升序)调用a.compareTo(b)而不是b.compareTo(a)
——因为如果a在b之前,则前者会导致正确的负结果,如果a在b之后,则会导致严格的正结果。
因此,如果您编写比较器,使得比较(a,b)
调用a.compareTo(b)
您将得到升序;如果它调用b.compareTo(a),您将得到降序。
Java在进行比较时抛出的错误是: 然后比较的方法(比较器 你知道发生了什么事吗?
假设我有一个双人课 我希望对它进行排序,首先是第一个值,然后是第二个值。现在,如果我这样做 一切都很好,列表按对的第一个值排序,但如果我这样做 它因错误而失败 好吧,所以它可能无法推断参数,所以如果我这样做 它因错误而失败 为什么它适用于comparing()而不适用于comparing()。然后比较()?
问题内容: Comparable和Comparator之间的主要区别是什么。 在什么情况下,哪个比另一个优先? 问题答案: 当你的类实现时,该类的方法将定义该对象的“自然”顺序。根据合同,该方法有义务(尽管不要求)与该对象上的其他方法保持一致,例如,当比较返回true 时,应始终为对象返回0 。 一个比较本身就是如何比较两个对象的定义,可用于可能不与自然顺序排列的方式来比较的对象。 例如,字符串通
我知道这些接口用于对集合中的对象进行排序。但我怀疑这两者的真正区别。我读到的一个事实是,如果要比较两个对象而不使用当前对象,请使用Compariable(此)。 但我的问题是即使使用比较器,我们也会比较相同的对象类型。 这里真正的区别是什么。我很困惑。假设下面的例子, 如果我使用比较器,我会让一个类实现比较器,而不是这个。年龄,它有人。年龄那么这里有什么不同呢? 我不知道Collections.s
问题内容: 假设我有一对班 我希望先按第一个值排序,然后再按第二个值排序。现在,如果我这样做 一切正常,列表按对的第一个值排序,但是如果我这样做 它因错误而失败 好的,所以它可能无法推断参数,所以如果我这样做 它因错误而失败 为什么它对compare()而不是compare()。thenComparing()有效? 问题答案: 该错误似乎与的通用参数有关。一种解决方法是尝试使用显式类型: 请注意,