Java 如何使用2个int参数对ArrayList进行排序?
我想对进程对象的arraylist进行排序。一个进程有两个参数:开始时间和持续时间。我想在startTime中按升序对arraylist进行排序,对于同一startTime,我想在持续时间中按升序进行排序。我该怎么做呢?您可以创建一个自定义的Java 如何使用2个int参数对ArrayList进行排序?,java,sorting,arraylist,Java,Sorting,Arraylist,我想对进程对象的arraylist进行排序。一个进程有两个参数:开始时间和持续时间。我想在startTime中按升序对arraylist进行排序,对于同一startTime,我想在持续时间中按升序进行排序。我该怎么做呢?您可以创建一个自定义的比较器 或者您可以创建可重用的比较器来帮助将来进行排序。例如,您可以使用,它允许您对进程对象的属性进行排序。该链接包含使用比较器或创建自己的自定义比较器的示例代码 然后,您可以使用,它允许您同时对多个属性进行排序。首先,我假设您的Process类如下所示(加
比较器
或者您可以创建可重用的比较器来帮助将来进行排序。例如,您可以使用,它允许您对进程
对象的属性进行排序。该链接包含使用比较器
或创建自己的自定义比较器
的示例代码
然后,您可以使用,它允许您同时对多个属性进行排序。首先,我假设您的Process类如下所示(加上其他内容):
第一种选择,即流程的“默认”排序方法是按照您所述的方法(先按startTime升序,然后按duration升序),您可以使流程实现可比性:
公共类流程实现了可比较的{
私人内部启动时间;
私有整数持续时间;
公共int比较(处理其他){
if(startTimeother.startTime)返回1;
//如果在这里,则startTime==other.startTime
if(持续时间<其他持续时间)返回-1;
if(duration>other.duration)返回1;
返回0;
}
}
然后,您可以使用以下简单方法对ArrayList
进行排序:
ArrayList<Process> a = new ArrayList<Process>();
//Fill up a with process instances
Collections.sort(a); //Sorts according to the compareTo method in Process.
ArrayList a=新的ArrayList();
//用流程实例填充流程
收集.分类(a)//根据过程中的比较方法进行排序。
但是,如果这不是对流程进行排序的默认方法(或者您无法使流程实现可比性),那么您需要定义一个自定义的比较器,如下所示:
class ProcessComparator implements Comparator<Process>{
public int compare(Process p1, Process p2){
if(p1.getStartTime() < p2.getStartTime()) return -1;
if(p1.getStartTime() > p2.getStartTime()) return 1;
//If here, p1.startTime == other.startTime
if(p1.getDuration() < p2.getDuration()) return -1;
if(p1.getDuration() > p2.getDuration()) return 1;
return 0;
}
}
类ProcessComparator实现Comparator{
公共整数比较(进程p1、进程p2){
if(p1.getStartTime()p2.getStartTime())返回1;
//如果在这里,则p1.startTime==other.startTime
if(p1.getDuration()p2.getDuration())返回1;
返回0;
}
}
然后,使用一个:
ArrayList<Process> a = new ArrayList<Process>();
//Fill up a with process instances
Collections.sort(a, new ProcessComparator()); //Sorts according to the compareTo method in Process.
ArrayList a=新的ArrayList();
//用流程实例填充流程
sort(一个新的ProcessComparator());//根据进程中的compareTo方法进行排序。
您可以从尝试开始:)与自定义比较器一起使用o bro,签出。他们是****。
class ProcessComparator implements Comparator<Process>{
public int compare(Process p1, Process p2){
if(p1.getStartTime() < p2.getStartTime()) return -1;
if(p1.getStartTime() > p2.getStartTime()) return 1;
//If here, p1.startTime == other.startTime
if(p1.getDuration() < p2.getDuration()) return -1;
if(p1.getDuration() > p2.getDuration()) return 1;
return 0;
}
}
ArrayList<Process> a = new ArrayList<Process>();
//Fill up a with process instances
Collections.sort(a, new ProcessComparator()); //Sorts according to the compareTo method in Process.