Java:实施可比较的问题

Java: Implementing Comparable Issue

我是新来的,正在寻找有关我的代码的建议。我正在尝试使 arrayList ArrayList<patient> heartPatientArray = new ArrayList<patient>(); //heart patients 能够在 patient's arrivalTime 上进行排序。

代码:

    class patient implements Comparable
{
    int typeSickness; //1 for heart 2 for gastro 3 for bleeding
    double arrivalTime; //what time they arrived   SORT BY
    int deathTime; // what time they are set to balk or die
    int status; //0 for being cared for, 1 to n for location in line, -1 if dead
    int personalNumberInLine; //personal number in line updated everytime someone enters the line
    double timeSpentInQueue; //total time before they either died or were able to be treated
    int idOfPerson; //unique id the person gets when entering the queue
    boolean isAlive;

    public patient(int sickness, double arrival, int ID) { //sets the patients sickness, time arrived, and ID
        typeSickness=sickness;
        arrivalTime=arrival;
        idOfPerson = ID;
    }
    public int getTypeSickness() {
        return typeSickness;
    }
    public void setTypeSickness(int typeSickness) {
        this.typeSickness = typeSickness;
    }
    public double getArrivalTime() {
        return arrivalTime;
    }
    public void setArrivalTime(double arrivalTime) {
        this.arrivalTime = arrivalTime;
    }
    public int getDeathTime() {
        return deathTime;
    }
    public void setDeathTime(int deathTime) {
        this.deathTime = deathTime;
    }

    public int getStatus() {
        return status;
    }
    public void setStatus(int status) {
        this.status = status;
    }
    public int getNumberInLine() {
        return personalNumberInLine;
    }
    public void setNumberInLine(int numberInLine) {
        this.personalNumberInLine = numberInLine;
    }
    @Override
    public int compareTo(patient one) {
        if (this.getArrivalTime() < one.getArrivalTime()) {
            return -1;
        }
        else if(this.getArrivalTime() > one.getArrivalTime()){
            return 1;
        }

        return 0;
    }

some code edited out for time's sake

我试过根据我在网上找到的一些代码来设计它的样式,但是我在 compareTo(patient one) 的 Remove Override Notation 上收到一个错误,在 class patient implements Comparable 上收到一个错误告诉我我必须class摘要。

正确实现 compareTo 后,我将如何对 heartPatientArray 进行排序?

您正在实现 Comparable 接口的 raw 形式。因此,compareTo 采用 Object,这解释了为什么您在尝试实现接口时遇到错误。

相反,将您的 class 作为类型参数传递。

class patient implements Comparable<patient>

那么您的 compareTo 方法将按原样正确实施 Comparable<patient>

通常,Java 命名约定会说要将您的 class 姓名大写。

class Patient implements Comparable<Patient>

您可以使用以下方式对列表进行排序:

Collections.sort(heartPatientArray);

如果您想倒序排序,您可以指定:

Collections.sort(heartPatientArray, Comparator.reverseOrder());

通常,您可以通过传递 Comparator<Patient> 的实例来对其进行排序,实现 Comparatorcompare 方法,注意将类型参数传递给 Comparable 就像我们现在为 Comparable 做的那样。然后将 Comparator<Patient> 的实例作为第二个参数传递给 Collections.sort.

替换

class patient implements Comparable

class patient implements Comparable<patient>

否则您需要在 class 中实施 compareTo(Object o)

当您有 Comparable class 的实例时,您可以将它们添加到 ArrayList 并使用方法 Collections.sort.

所以,基本上您想要的是能够比较 2 个 patient 对象。现在,您可以比较 patient 和其他一些对象。为确保您只比较 patient 个对象,您需要更改

class patient implements Comparable

class patient implements Comparable<patient>

你的方法在任何方面都没有错(除了 compareTo 参数)。当然,您可以将 patient 与其他对象进行比较。如果你想那样做,

@Override
public int compareTo(Object obj) {
    // you would want to see if the `Object` is of `patient` type
    if( !(obj instanceof patient) )
        return -1;    // `obj` IS NOT OF TYPE `patient`; PICK YOUR RETURN VALUE; IDEALLY THROW AN EXCEPTION
    patient one = (patient) o;
    if (this.getArrivalTime() < one.getArrivalTime()) {
        return -1;
    }
    else if(this.getArrivalTime() > one.getArrivalTime()){
        return 1;
    }

    return 0;
}

然后调用Collections.sort(..)什么的就可以排序了