如何在Java中定义一个基于两个变量进行比较的Comparator
我想创建一个比较器来操作,使得到达时间较低的进程在排序中首先出现,如果两个进程具有相同的到达时间,则进程 ID 较低的进程在排序中排在第一位。我尝试了以下代码,但它似乎不起作用。有人看到其中的缺陷吗?
public class FCFSComparator implements Comparator<Process>
{
public int compare(Process o1, Process o2)
{
int result = o1.getArrivalTime() - o2.getArrivalTime();
if(result == 0)
{
return (o1.getPid() < o2.getPid()) ? -1 : 1;
}
else
{
return result;
}
// return (result != 0 ? result : o1.getPid() - o2.getPid());
}
}
具体来说,考虑到以下流程,
pid = 0 arrival time = 10
pid = 1 arrival time = 30
pid = 2 arrival time = 15
pid = 3 arrival time = 15
pid = 4 arrival time = 66
我最后得到以下排序
Pid = 0 arrival time = 10
Pid = 2 arrival time = 15
Pid = 1 arrival time = 30
Pid = 4 arrival time = 66
Pid = 3 arrival time = 15
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我找不到你的比较器有什么问题。这是我的测试用例:
输出:
I can't find anything wrong with your comparator. Here is my test case:
Output:
我假设您正在比较的东西是 int 。在两个变量相等的情况下,内部比较仍然返回 1。像这样的东西应该有帮助:
编辑:我检查了上面的代码,它确实输出了正确的顺序。我只能假设您的代码中其他地方有错误。
完整的测试代码为:
I'm making that assumption that the things you are comparing are
int
. In the case of both variables being equal, you are still returning 1 from the inner comparison. Something like this should help:EDIT: I checked the above code and it does output the correct order. I can only assume you have a bug somewhere else in your code.
The full test code is:
我相信你想要这个:
I believe you want this:
最简单的是:
The simplest is: