2016-03-02 50 views
1

我有一个课程表中,我在这个班我分析的输入文件有排序我对象的ArrayList问题

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()); 

     } 
    }; 

IMAGE1

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); 


} 
+0

你在哪里打电话排序?也不要使用'a-b'来更好地使用'Long.compare(Long)'方法。 – SMA

+0

所以你正在尝试使用'Collections.sort()'进行排序? – Kartic

+0

@Kartic是的,我打算使用Collections.sort(processes,object.p)。我在调度类中紧接在processes.add(object) – dre

回答

0

我假设你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<Process> queue = new LinkedList<Process>(processes); 
+0

非常感谢你。有用。现在可以请你帮助我,把这个“进程”队列形式的队列 =新LinkedList 请 – dre

+0

看到我的更新 – Kartic

+0

作品像一个魅力。谢谢兄弟 – dre

0

实现可比接口到进程。

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);