Я предполагаю, что вы сравниваете вещи int
. В случае, когда обе переменные равны, вы все равно возвращаете 1 из внутреннего сравнения. Как-то так должно помочь:
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();
}
else
{
return result;
}
}
}
РЕДАКТИРОВАТЬ: я проверил вышеуказанный код, и он выводит правильный порядок. Я могу только предположить, что у вас есть ошибка где-то еще в вашем коде.
Pid = 0 arrival time = 10
Pid = 2 arrival time = 15
Pid = 3 arrival time = 15
Pid = 1 arrival time = 30
Pid = 4 arrival time = 66
Полный код теста:
import java.util.Comparator;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;
public class Main
{
public static void main(String[] args)
{
List<Process> processes = new ArrayList<Process>();
processes.add(new Process(10, 0));
processes.add(new Process(30, 1));
processes.add(new Process(15, 2));
processes.add(new Process(15, 3));
processes.add(new Process(66, 4));
Collections.sort(processes, new FCFSComparator());
for (Process process : processes)
System.out.println("Pid = " + process.getPid() + " arrival time = " + process.getArrivalTime());
}
static 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();
}
else
{
return result;
}
}
}
static class Process
{
private int arrivalTime;
private int pid;
Process(int arrivalTime, int pid)
{
this.arrivalTime = arrivalTime;
this.pid = pid;
}
public int getArrivalTime()
{
return arrivalTime;
}
public int getPid()
{
return pid;
}
}
}