Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/383.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

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 优先级队列排序不正确_Java_Sorting_Priority Queue_Comparator - Fatal编程技术网

Java 优先级队列排序不正确

Java 优先级队列排序不正确,java,sorting,priority-queue,comparator,Java,Sorting,Priority Queue,Comparator,目前这是我的enum(VisitorInfo)类: 这是我当前的队列声明: PriorityQueue<VisitorInfo> pq = new PriorityQueue<VisitorInfo>(20, new Comparator<VisitorInfo>() { public int compare(VisitorInfo n1, VisitorInfo n2) { if (n1.ticket.getS

目前这是我的enum(VisitorInfo)类:

这是我当前的队列声明:

    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;
        }
    });
为什么分类不正确


很抱歉,我忘了添加,Fast应该先打印,然后是reg,然后是no。

要按名称排序还是按状态排序?您的比较器是基于状态的,但您希望订单是按名称排序的。N01、N02、N03都是状态为0的无票。那么哪一个会先回答呢?

你应该用适当的语言来标记你的问题。我猜它是java?是的,抱歉,更新了它为什么你认为它不起作用?因为我在REG2之前添加了REG1,反之亦然,所以它应该打印为:FAST1 FAST2 REG1 REG2 REG3 NO1 NO2NO3@AlexanderKhaosGreenstein:你读过Javadoc吗?“如果多个元素以最小值绑定,则头部就是其中一个元素——绑定会被任意断开。”
PriorityQueue
不支持保持这样的插入顺序。基本上,概念是,首先,我们添加对象的顺序是它们在队列中应保持的顺序,其次,快票优先于普通票,普通票优先于无票。只要队列保留添加对象的顺序,同时确保优先级较高的对象是第一个,那么就可以了。在本例中,我按名称顺序添加了它们,但是如果我在REG1之前添加了REG2,那么它应该在REG1之前打印REG2。A
PriorityQueue
不支持“我们添加对象的顺序是它们应该保留在队列中的顺序。”@AlexanderKhaosGreenstein说,澄清与您迄今为止所说的不一致,这使得问题更加模糊。我不知道为什么会投反对票,但看看路易斯·沃瑟曼在他的其他回答中指出了什么。鉴于您目前的实施情况和期望,您想要的订单根本不会发生。我刚刚读了他所说的,我现在明白了。我不知道在打领带的情况下它不能维持秩序。谢谢大家!
    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