【发布时间】:2020-02-05 01:33:56
【问题描述】:
我有一个名为 task 的类,我想将它放入 PriorityQueue。
我的班级在 date 和一个名为 isUrgent
的布尔字段上具有可比性 @Override
public int compareTo(Task task) {
int x = 0;
if (!isUrgent && task.isUrgent)
x=1;
else if (isUrgent && !task.isUrgent)
x=-1;
else return date.compareTo(task.date);
return x +date.compareTo(task.date);
}
第一次使用 Comparables,当我从优先级队列中删除一个任务时,它应该在最近的日期之前删除,但如果它是紧急的,那么它应该被删除第一个紧急任务。
但我在删除过程中得到了这个,
Task{isUrgent=true, date=Sat Apr 04 00:00:00 BST 2020}
Task{isUrgent=true, date=Sat Apr 04 00:00:00 BST 2020}
Task{isUrgent=false, date=Sat Apr 04 00:00:00 BST 2020}
Task{isUrgent=true, date=Thu Apr 04 00:00:00 BST 2030}
Task{isUrgent=false, date=Sat Apr 04 00:00:00 BST 2020}
Task{isUrgent=true, date=Thu Apr 04 00:00:00 BST 2030}
Task{isUrgent=false, date=Thu Apr 04 00:00:00 BST 2030}
Task{isUrgent=false, date=Thu Apr 04 00:00:00 BST 2030}
我在 compareTo 方法中做错了什么?
【问题讨论】:
-
是的,但我也改变了,没有最后一个 else 语句。它保持不变
-
@ScaryWombat 如果满足前 2 个条件中的任何一个,它将通过最后一次返回。设置
x=-1/0/1然后添加它很奇怪。compareTo只使用 0 - 不是特定值。 -
@ScaryWombat 别担心 - 我也有同样的想法,不得不眯着眼睛看了几秒钟 :-)
标签: java priority-queue