Java 比较法是如何工作的?
程序按升序对数组排序,但在return语句中交换Java 比较法是如何工作的?,java,Java,程序按升序对数组排序,但在return语句中交换id和compareid时,数组按降序排序,但对System.out.println(e[1].compareTo(e[0])的输出没有影响在这两种情况下都返回1。为什么会这样 package example; import java.util.Arrays; class Example implements Comparable<Example> { int id; public int compareTo(Ex
id
和compareid
时,数组按降序排序,但对System.out.println(e[1].compareTo(e[0])的输出没有影响
在这两种情况下都返回1
。为什么会这样
package example;
import java.util.Arrays;
class Example implements Comparable<Example> {
int id;
public int compareTo(Example ob) {
int compareid = ob.id;
return Integer.compare(id, compareid); // problem
}
}
class comparableinterface {
public static void main(String args[]) {
Example e[] = new Example[3];
e[0] = new Example();
e[0].id = 2;
e[1] = new Example();
e[1].id = 3;
e[2] = new Example();
e[2].id = 0;
Arrays.sort(e);
for (Example temp : e) {
System.out.println(temp.id);
}
System.out.println(e[1].compareTo(e[0]));
}
}
包示例;
导入java.util.array;
类示例实现了可比较的{
int-id;
公共整数比较(示例ob){
int compareid=ob.id;
返回整数。比较(id,compareid);//问题
}
}
类可比接口{
公共静态void main(字符串参数[]){
示例e[]=新示例[3];
e[0]=新示例();
e[0].id=2;
e[1]=新示例();
e[1].id=3;
e[2]=新示例();
e[2].id=0;
数组。排序(e);
例如(例如temp:e){
系统输出打印项次(温度id);
}
System.out.println(e[1].compareTo(e[0]);
}
}
因为比较是在对数组和数组进行排序后执行的。排序(e)会更改数组e的内容
移动
排序之前,它将按您预期的方式运行。因为在对数组和数组进行排序之后,将执行比较。排序(e)更改数组e的内容 移动
排序前,它将按您预期的方式运行。比较的结果反映了对象和参数之间的特定顺序。在排序数组中,第一个和第二个之间的值始终为+1,根据compareTo表示的内容进行排序
它不是数字关系的表示 比较的结果反映了对象和参数之间的某种顺序。在排序数组中,第一个和第二个之间的值始终为+1,根据compareTo表示的内容进行排序
它不是数字关系的表示 因为为了对数组进行升序/降序排序,您还将
示例中的compareTo
方法更改为(即,您将compareTo方法中的逻辑交换)。这就是为什么它在System.out.println(e[1].compareTo(e[0])中给出相同的结果代码>。基本上,在更改后,您的compareTo
不再检查“更小”,而是检查“更大”。所以即使System.out.println(e[1].compareTo(e[0])
在两种情况下都返回1,第一种情况下它告诉您“e[1]大于e[0]”,第二种情况下它告诉您“e[1]小于e[0]”。这有点棘手,想想看 因为为了对数组进行升序/降序排序,您还将示例中的compareTo
方法更改为(即,您将compareTo方法中的逻辑交换)。这就是为什么它在System.out.println(e[1].compareTo(e[0])中给出相同的结果代码>。基本上,在更改后,您的compareTo
不再检查“更小”,而是检查“更大”。所以即使System.out.println(e[1].compareTo(e[0])
在两种情况下都返回1,第一种情况下它告诉您“e[1]大于e[0]”,第二种情况下它告诉您“e[1]小于e[0]”。这有点棘手,想想看 您正在重写的比较(示例ob)
方法中使用,仅供参考
Integer.compare(id,compareid)如果id==compareid,则返回值0;如果idcompareid,则该值大于0
在对数组进行排序后,调用compareTo(示例ob)
,这就是为什么该方法总是返回1
在对数组进行排序之前,请尝试调用compareTo(示例ob)
。您正在重写的compareTo(示例ob)
方法中使用,仅供参考
Integer.compare(id,compareid)如果id==compareid,则返回值0;如果idcompareid,则该值大于0
在对数组进行排序后,调用compareTo(示例ob)
,这就是为什么该方法总是返回1
在对数组排序之前,尝试调用compareTo(示例ob)
比较法被称为自然比较法
C类的自然顺序与
等于当且仅当e1.compareTo(e2)==0具有相同的布尔值时
对于C类的每一个e1和e2,等于(e2)
另请参阅java.utils.Arrays.mergeSort()源代码,了解如何使用compareTo对数组进行排序:
for (int j=i; j>low &&
((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
swap(dest, j, j-1);
比较法被称为自然比较法
C类的自然顺序与
等于当且仅当e1.compareTo(e2)==0具有相同的布尔值时
对于C类的每一个e1和e2,等于(e2)
另请参阅java.utils.Arrays.mergeSort()源代码,了解如何使用compareTo对数组进行排序:
for (int j=i; j>low &&
((Comparable) dest[j-1]).compareTo(dest[j])>0; j--)
swap(dest, j, j-1);
应该对整数的实例调用compareTo()方法,而不是静态compare()方法
试试这个:
int id;
public int compareTo(Example ob) {
Integer compareid = ob.id;
return compareid.compareTo(id);
}
应该对整数的实例调用compareTo()方法,而不是静态compare()方法
试试这个:
int id;
public int compareTo(Example ob) {
Integer compareid = ob.id;
return compareid.compareTo(id);
}
我认为这是这里为数不多的正确答案之一。我的答案中也有同样的意思,所以我认为这是这里为数不多的正确答案之一。我在我的回答中也有同样的意思,所以我的答案是+1。真的吗?我得到输出:3 2 0 1-然后进程终止OK它正在调用Integer类的compareTo方法:)真的吗?我得到输出:3 2 0 1-然后进程终止OK它正在调用Integer类的compareTo方法:)