【问题标题】:sorting my arraylist of objects issues排序我的对象问题的arraylist
【发布时间】:2016-03-02 05:58:25
【问题描述】:

我有一个时间表课程,我有

ArrayList<Processes> processes = new ArrayList<Process>();

在这个类中,我解析一个输入文件,获取 3 个值并创建一个对象数组。

Process object = new Process(processName, arrival, burst);    
processes.add(object);  

我的目标是按“到达”时间对数组列表进行排序。所以我可以将项目添加到链表队列。我在分类它时遇到了巨大的困难,我尝试了比较器无济于事。我有一个 Process 类,其中有我的 getName、getArrival、getBurst 方法。以及:

Comparator<Process> p = new Comparator<Process>(){

        public int compare(Process p1, Process p2){
            return(p1.getArrival() - p2.getArrival());

        }
    };

for(int i = 0; i<30; i++  ){
    if(arrival == i )
        System.out.println("Time " + i + ": " + "P"+ id + " " + description);
    if(selected = i )
        System.out.println("Time " + i + ": " + "P"+ id + " " + description);
    if(finished = i )
        System.out.println("Time " + i + ": " + "P"+ id + " " + description);


}

【问题讨论】:

  • 你在哪里调用排序?也不要使用a-b 最好使用Long.compare(Long) 方法。
  • 所以你正在尝试使用Collections.sort()进行排序?
  • @Kartic 是的,我打算使用 Collections.sort(processes, object.p)。我在 processes.add(object) 之后的调度类中调用该排序
  • Java(和 C#:IComparable)中的任何排序对象中,您使用的对象的类应该实现 Comparable 以便您可以使用 compareTo(Object o) 轻松对它们进行排序。

标签: java sorting linked-list queue


【解决方案1】:

我假设您的 Process 课程类似于:

class Process implements Comparable<Process> {

    private String processName;
    private Date arrival;

    public Process(String processName, Date arrival) {
        this.processName = processName;
        this.arrival = arrival;
    }

    public String getProcessName() {
        return processName;
    }
    public Date getArrival() {
        return arrival;
    }

    @Override
    public int compareTo(Process p) {
        return this.getArrival().compareTo(p.getArrival());
    }
}

现在,如果您尝试以下类似的方法,它应该可以工作。如果不是,请告诉我们确切的问题。

Process p1 = new Process("P1", new Date(11111111113L));
Process p2 = new Process("P2", new Date(11111111111L));
Process p3 = new Process("P3", new Date(11111111112L));

ArrayList<Process> processes = new ArrayList<Process>();
processes.add(p1);
processes.add(p2);
processes.add(p3);

Collections.sort(processes);

[更新]

要将ArrayList转成Queue,可以试试:

Queue<Process> queue = new LinkedList<Process>(processes);

【讨论】:

  • 非常感谢。有用。你现在能不能帮我把这个“进程”以 Queue = new LinkedList 的形式放入队列中
  • 嘿,伙计,我继续编写代码,但遇到了另一个问题。想问你,因为你以前帮了我很多。我需要产生一个像我在图片中显示的输出。我应该使用队列来获取进程,因为现在它们按到达时间排序。我提供了一个原型代码,说明我应该如何去做,但我不确定它是否正确。如果您能提供一些见解,那就太好了! (见编辑)
  • 如果它给出了所需的输出,那么没关系。我可能会选择 if-else if-else if 或 if-else if-else 而不是 if-if-if 以避免不必要的检查。
【解决方案2】:

为 Process 实现 Comparable 接口。

public class Process implements Comparable<Process> {
Process(processName, arrival, burst)
{constructor}

It implements the method

@Override
public int compareTo(Process p1,Process p2) {
    //write code here for compare name
    }}

主要:

ArrayList<Processes> processes = new    ArrayList<Process>();

//Add objects

processes.add(object);  

Collections.sort(Processes);

【讨论】:

    猜你喜欢
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2016-09-05
    • 2010-11-22
    • 1970-01-01
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多