可比较的 Java 排序

问题描述 投票:0回答:2
import java.util.*;
public class TestPerson{
    public static void main(String[] args){
        person Albert = new Person(1);
        person James = new Person(2);
        person Elizabeth = new Person(3);
        person [] personArray = new Person[3];
        personArray[0] = Albert;
        personArray[1] = James;
        personArray[2] = Elizabeth;
        Arrays.sort(personArray);
        System.out.println(personArray[0].number);
        System.out.println(personArray[1].number);
        System.out.println(personArray[2].number);
    }
}

public class Person implements Comparable{
    int number;
    public Person(int number){
        this.number = number;
    }
    public int compareTo(Object o){
        if(!(o instanceof person)){
            System.out.println("error");
            System.exit(1);
            person newObject = (person) o;
            if (this.number > newObject.number){
                return 1;
            }
            else if(this.number == newObject.number){
                return 0;
            }
        }
        return -1;
    }
}

我很困惑为什么输出会向后排序:3,2,1。当 this.number>number 时,我的compareTo 方法返回一个正数,所以这不应该确保数字按从小到大的顺序排序吗? 谢谢

java sorting comparable
2个回答
0
投票

您的

compareTo
方法有一个错误,它总是返回 -1。但是,您可以通过实现
compareTo
而不是
Comparable<Person>
来大大简化您的
Comparable
方法:

class Person implements Comparable<Person> {
    public int compareTo(Person other) {
        return this.number - other.number;
    }
}

0
投票

您只需将

compareTo
方法更改为以下内容,这样,如果传递的不是
person
的实例,它会返回错误,否则它将转换传递的对象并进行比较:

 public int compareTo(Object o){
    if(!(o instanceof person)){
        System.out.println("error");
        System.exit(1);
    }

    person newObject = (person) o;
    if (this.number > newObject.number){
       return 1;
    }
    else if(this.number == newObject.number){
       return 0;
    }
    return -1;
}
© www.soinside.com 2019 - 2024. All rights reserved.