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

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

我不明白它是如何打印出根据每个患者的先后顺序订购的患者的.帮助将不胜感激.

import java.util.PriorityQueue;

public class Patient implements Comparable {

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 pq = new PriorityQueue();

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()方法可用于比较.您始终可以根据类成员和相等性定义提供自定义实现.

Collections框架主要使用compareTo()对数组进行排序或对优先级队列中的元素进行排序. compareTo()来自Comparable接口.

public int compareTo(Patient rhs) {

if(prio==rhs.prio) {

return number - rhs.number; // First line

} else {

return prio - rhs.prio; // Second line

}

}

compareTo()方法是基于该类的数量和优先级属性定义的.当当前实例小于然后分别传递时,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

分析:

Kalle和Kallee具有最高优先级(最小值),但是Kalle的数量低于Kallee.其他人则由prio组织.

标签:java

来源: https://codeday.me/bug/20191119/2034583.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值