Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用2个int参数对ArrayList进行排序?_Java_Sorting_Arraylist - Fatal编程技术网

Java 如何使用2个int参数对ArrayList进行排序?

Java 如何使用2个int参数对ArrayList进行排序?,java,sorting,arraylist,Java,Sorting,Arraylist,我想对进程对象的arraylist进行排序。一个进程有两个参数:开始时间和持续时间。我想在startTime中按升序对arraylist进行排序,对于同一startTime,我想在持续时间中按升序进行排序。我该怎么做呢?您可以创建一个自定义的比较器 或者您可以创建可重用的比较器来帮助将来进行排序。例如,您可以使用,它允许您对进程对象的属性进行排序。该链接包含使用比较器或创建自己的自定义比较器的示例代码 然后,您可以使用,它允许您同时对多个属性进行排序。首先,我假设您的Process类如下所示(加

我想对进程对象的arraylist进行排序。一个进程有两个参数:开始时间和持续时间。我想在startTime中按升序对arraylist进行排序,对于同一startTime,我想在持续时间中按升序进行排序。我该怎么做呢?

您可以创建一个自定义的
比较器

或者您可以创建可重用的比较器来帮助将来进行排序。例如,您可以使用,它允许您对
进程
对象的属性进行排序。该链接包含使用
比较器
或创建自己的自定义
比较器
的示例代码


然后,您可以使用,它允许您同时对多个属性进行排序。

首先,我假设您的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.