2013-03-26 15 views
1

我创建了一个Node类:如何创建基于类的某些属性进行排序的优先级队列?

public class Node { 
int vertex; 
double latency; 
Node predecessor;} 

public double getLatency() 
{ 
    return latency; 
} 

我想创建一个优先级队列,通过延迟对节点排序,从最小到最大。经过研究,我相信我需要重写比较器?

PriorityQueue<Node> pqueue = new PriorityQueue<Node>(numVertices, new Comparator<Node>({ 
     @Override 

      ??? 
     } 
    } 

我不太确定如何覆盖它。

+2

谷歌2分钟会给你答案。 – 2013-03-26 20:08:42

回答

1

“???”在你的例子可以用下面的替换:

public int compare(Node a, Node b) { 
    if (a.getLatency() < b.getLatency()) 
     return -1; 
    else if (a.getLatency() > b.getLatency()) 
     return 1; 
    return 0; 
} 
1

你只实际上需要两个延迟进行比较。这意味着重写类比较的方法compare比较两个输入Node的延迟:

PriorityQueue<Node> pqueue = new PriorityQueue<Node>(numVertices, new Comparator<Node>({ 
    @Override 
    public int compare(Node a, Node b) { 
     Integer.compare(a.getLatency(), b.getLatency()); 
    } 
} 

但是对Java 7这只适用,对于其他版本:

new Integer(a.getLatency()).compareTo(new Integer(b.getLatency())); 

如果你不想创建一个新对象然后像往常一样比较int