PriorityQueue没有正确排序

时间:2013-10-22 03:43:25

标签: java sorting priority-queue comparator

目前这是我的枚举(VisitorInfo)类:

public enum Ticket{
    NO_TICKET(0), REG_TICKET(1), FAST_TICKET(2);
    private int status;

    Ticket(int status)
    {
        this.status = status;
    }

    int getStatus() {
        return status;
    }
}

这是我目前的队列声明:

    PriorityQueue<VisitorInfo> pq = new PriorityQueue<VisitorInfo>(20, new Comparator<VisitorInfo>() {
        public int compare(VisitorInfo n1, VisitorInfo n2) {
            if (n1.ticket.getStatus() == n2.ticket.getStatus())
                return 0;
            if (n1.ticket.getStatus() > n2.ticket.getStatus())
                return -1;
            return 1;
        }
    });

我的主要方法:

public static void main(String[] args) throws FullQueueException {
RideQueue bleh = new RideQueue("hi", 20);

VisitorInfo bleh1 = new VisitorInfo("NO1", VisitorInfo.Ticket.NO_TICKET);
VisitorInfo bleh2 = new VisitorInfo("NO2", VisitorInfo.Ticket.NO_TICKET);
VisitorInfo bleh3 = new VisitorInfo("NO3", VisitorInfo.Ticket.NO_TICKET);
VisitorInfo bleh4 = new VisitorInfo("REG1", VisitorInfo.Ticket.REG_TICKET);
VisitorInfo bleh5 = new VisitorInfo("REG2", VisitorInfo.Ticket.REG_TICKET);
VisitorInfo bleh6 = new VisitorInfo("REG3", VisitorInfo.Ticket.REG_TICKET);
VisitorInfo bleh7 = new VisitorInfo("FAST1", VisitorInfo.Ticket.FAST_TICKET);
VisitorInfo bleh8 = new VisitorInfo("FAST2", VisitorInfo.Ticket.FAST_TICKET);

bleh.pq.add(bleh1);
bleh.pq.add(bleh2);
bleh.pq.add(bleh3);
bleh.pq.add(bleh4);
bleh.pq.add(bleh5);
bleh.pq.add(bleh6);
bleh.pq.add(bleh7);
bleh.pq.add(bleh8);

for (int i = 1; i<9; i++)
{
    System.out.println(bleh.pq.poll().getName());
}



}

我的输出:

FAST1
FAST2
REG3
REG2
REG1
NO2
NO1
NO3

为什么不能正确排序?

对不起,我忘了添加,Fast应先打印出来然后再打印,然后再打印出来。

1 个答案:

答案 0 :(得分:0)

您希望按名称排序还是按状态排序?您的比较器基于状态,但您希望订单是名称。 N01,N02,N03都是NO_TICKET,状态为0.那么哪一个会先行?