比较JAVA中的优先级队列

时间:2013-03-14 22:58:02

标签: java oop queue priority-queue

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

这只是粗糙的粗糙草案只是为了得到一个基本的想法,我将有一个称为患者的对象,我假设也将有一个名称和条件严重...

  

//比较方法......

     

int severity

     

if(severity> 17){

     如果(患者严重程度>其他患者,

将严重程度替换为17   严重性){return 1}

     

否则if(患者严重程度>其他患者严重程度){return -1}     否则if(患者严重程度==其他患者严重程度){return 0}   }

     

else if(severity< 1){

     如果(患者严重程度>其他患者,

将严重程度替换为17   严重性){return 1}

     

否则if(患者严重程度>其他患者严重程度){return -1}     否则if(患者严重程度==其他患者严重程度){return 0}   }

     

其他{

     如果(患者严重程度>其他患者,

将严重程度替换为17   严重性){return 1}

     

否则if(患者严重程度>其他患者严重程度){return -1}     否则if(患者严重程度==其他患者严重程度){return 0}   }

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

2 个答案:

答案 0 :(得分:1)

假设我们有一个类Patient,其中包含一个int变量severity

如果int低于最大值且最大值低于最大值,则将'处理为min为min'称为钳位。制作钳位辅助函数非常有用,如下所示:

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,我们可以PriorityQueue'支持',然后说ArrayList,并使用compareTo进行二进制搜索,看看我们是否需要看起来更高,更低,或者我们有匹配。如果我们有匹配,那么我们可以在那里插入。如果我们没有得到匹配但是我们已经将其缩小到比下面的元素更严重但是比上面的元素更严重,我们可以将其插入那里。

如果所有插入都保持PriorityQueue排序,那么最严重的患者总是处于最顶层。

答案 1 :(得分:1)

您应该首先编写一个方法,将原始严重性转换为“标准化”严重性(即严重性在1到17之间)。然后你应该通过他们的标准化观察来比较患者:

private int normalizedSeverity(int severity) {
    if (severity < 1) {
        return 1;
    }
    if (severity > 17) {
        return 17;
    }
    return severity;
}

public int compare(Patient p1, Patient p2) {
    int severity1 = normalizedSeverity(p1.getSeverity());
    int severity2 = normalizedSeverity(p2.getSeverity());
    return Integer.compare(severity1, severity2);
}