java - JAVA中优先级队列的比较

标签 java oop queue priority-queue

我现在就澄清一下,这是大学的作业。我想要能帮助我学习的建议和答案,而不是复制和粘贴。我有一项任务需要模拟医院急诊室。它是练习 ADT 和优先级队列的实现。任务的条件之一是我需要创建一个compareTo方法,我想这将有助于优先考虑进入急诊室的患者,并且它是根据严重程度确定的。如果严重性大于 17,我必须将其替换为 17,如果严重性小于 1,我必须将其替换为 1...我仍然对这个 compreTo 以及两个对象或 int 的比较方式感到困惑:S....根据我在下面写的内容,任何人都可以向我解释如何比较严重性吗?

这只是一个粗略的草稿,只是为了获得一个基本的想法,我将有一个名为患者的对象,我认为它也将有一个名称和条件严重性...

//Comparator Method...

int severity

if (severity > 17) {

replace severity with 17 if (patient severity > other patient severity) { return 1 }

else if(patient severity > other patient severity) { return -1 } else if (patient severity == other patient severity) { return 0 } }

else if (severity < 1) {

replace severity with 17 if (patient severity > other patient severity) { return 1 }

else if(patient severity > other patient severity) { return -1 } else if (patient severity == other patient severity) { return 0 } }

else {

replace severity with 17 if (patient severity > other patient severity) { return 1 }

else if(patient severity > other patient severity) { return -1 } else if (patient severity == other patient severity) { return 0 } }

基本上问题是,您使用什么代码来比较两个对象或属于一个对象的两个整数。如果我在优先级队列中有很多项目需要比较,那么比较器如何工作。感谢您的所有帮助/输入!!!

最佳答案

假设我们有一个带有 int 变量 severity 的类 Patient

“如果 int 低于 min,则将其视为 min;如果低于 maxed,则将其视为 max”操作称为钳位。制作一个夹紧辅助函数会很有用,如下所示:

public static int clamp(int value, int min, int max)
{
   return value < min ? min : value > max ? max : value;
}

public int compareTo(Parent other)
{
    int clampedSeverity = clamp(this.severity, 1, 17);
    int clampedOtherSeverity = clamp(this.severity, 1, 17);
    //do comparisons
}

现在,创建一个 PriorityQueue - PriorityQueue 的语义是一个集合,它会在任何插入时自动排序,以便最高的比较元素(在此例中)情况,最高严重性)位于开头。

因此,要插入到 PriorityQueue 中,我们可以通过 ArrayList '支持' PriorityQueue,并使用二分搜索对其进行compareTo 来查看我们是否需要查看更高、更低或者是否有匹配项。如果我们有匹配项,那么我们就可以在那里插入。如果我们没有找到匹配项,但我们已将其范围缩小到比下面的元素更严重但小于上面的元素,我们可以将其插入那里。

如果所有插入都保持 PriorityQueue 排序,则最严重的患者始终位于顶部。

关于java - JAVA中优先级队列的比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15421794/

相关文章:

用于在线游戏的 Java 机器人

java - 为什么将数据库 'Apples' 提取到列表中而不是 ArrayList、Vector 或 LinkedList 中?

java - 具有默认级别访问权限的类内部公共(public)方法有什么用?

python - 在 Python 中初始化队列

java - 任何人都可以在 tomcat localhost 日志中指出此错误的原因吗?

java - JOptionPane 在不同的行上有多个输入

android - 在 Android 上,在用户退出或使用另一个应用程序然后返回后,我如何能够执行一些代码几秒钟?

c - C中线程调用入队函数

java - 如何使用serialize Collections.synchronizedList和co

c# - C#中如何调用另一个类的变量