gpt4 book ai didi

java - compareTo 和 equals 方法在此示例中如何工作?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:40:16 25 4
gpt4 key购买 nike

我不明白compareTo() 方法和equals() 方法。它们如何在下面的代码中工作?请为我描述一下,并在方法下查看我的评论。

我不明白它如何根据每个患者的 prio 打印出订购的患者。帮助将不胜感激。

 import java.util.PriorityQueue;

public class Patient implements Comparable<Patient> {
private String firstname;
private String lastname;
private String personNbr;
private int prio;
private int number;
private static int total = 0;

public Patient(String firstname, String lastname, String personNbr, int prio) {
this.firstname = firstname;
this.lastname = lastname;
this.personNbr = personNbr;
this.prio = prio;
total++;
number = total;

}

public int compareTo(Patient rhs) {
if(prio==rhs.prio) {
return number - rhs.number; // what happens here?
} else {
return prio - rhs.prio; // what happens here?
}
}

public boolean equals(Object rhs) {
if (rhs instanceof Patient) { // what happens here?
return compareTo((Patient) rhs) == 0; // what happens here?
} else {
return false;
}
}

public String toString() {
return this.firstname + this.lastname + this.personNbr + this.prio;

}

public static void main(String[] args) {

PriorityQueue<Patient> pq = new PriorityQueue<Patient>();
pq.offer(new Patient("Kalle", "Karlsson", "8503622-1213", 3));
pq.offer(new Patient("Lisa", "Svensson", "840312-1224", 7));
pq.offer(new Patient("Lena", "Nilsson", "820323-1224", 9));
pq.offer(new Patient("Kallee", "Karlssonn", "85503622-1213", 3));

System.out.println(pq.toString());
}

}

输出是

[KalleKarlsson8503622-12133, KalleeKarlssonn85503622-12133, LenaNilsson820323-12249, LisaSvensson840312-12247]

最佳答案

equals() 方法用于比较类的两个实例是否相等。它来自java的Object类。 java 中的所有类都有 equals() 方法可用于比较。您始终可以根据类成员和等式定义提供自定义实现。

compareTo() 主要由集合框架用于对数组进行排序或对优先级队列中的元素进行排序。 compareTo() 来自Comparable 接口(interface)。


public int compareTo(Patient rhs) {
if(prio==rhs.prio) {
return number - rhs.number; // First line
} else {
return prio - rhs.prio; // Second line
}
}

compareTo() 方法是根据类的numberprio 属性定义的。 compareTo() 在当前实例小于通过、等于或更小时分别返回负数、零或正数。


public boolean equals(Object rhs) {
if (rhs instanceof Patient) { // First Line
return compareTo((Patient) rhs) == 0; // Second Line
} else {
return false;
}
}

在第一行中,您检查传递给方法的参数是否是 Patient 类的实例。因为您正在检查两个应该属于同一类型的实例是否相等。

第二行,您正在使用 compareTo() 方法来定义实例的相等性。


问题更新:

这里是 toString() 方法。

@Override
public String toString() {
return
"firstname='" + firstname +
" lastname='" + lastname +
" personNbr='" + personNbr +
" prio=" + prio +
" number=" + number;
}

您需要poll() 而不是仅仅打印它们。 poll() 检索并移除此队列的头部。这将代表队列中元素的真实顺序,而不是 toString()

while (!pq.isEmpty()) {
System.out.println(pq.poll());
}

输出:

firstname='Kalle lastname='Karlsson personNbr='8503622-1213 prio=3 number=1
firstname='Kallee lastname='Karlssonn personNbr='85503622-1213 prio=3 number=4
firstname='Lisa lastname='Svensson personNbr='840312-1224 prio=7 number=2
firstname='Lena lastname='Nilsson personNbr='820323-1224 prio=9 number=3

分析:

KalleKallee 具有最高优先级(最小值),但Kallenumber 较低比 Kallee。其他由 prio 组织。

关于java - compareTo 和 equals 方法在此示例中如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34532067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com