0

優先キューを作成してコンパレータを使用しようとしていますが、オブジェクトを追加すると、最後のオブジェクトが追加され、以前のオブジェクトがキューに表示されません。

以下はコードです:

public class CustomerCompare implements Comparator<Customer>{
    @Override
    public int compare(Customer c1, Customer c2) {
        if(c1.priority>c2.priority)
            return 1;
        if(c1.priority>c2.priority)
            return -1;
        return 0;

    }
}      

public class PQueue {
    public static void main(String[] args) {
        Comparator<Customer> comparator = new CustomerCompare();
        PriorityQueue<Customer> queue = new PriorityQueue<Customer>(5, comparator);
        queue.add(new Customer("c1", 1));
        System.out.println("Queue is now :" + queue);
        queue.add(new Customer("c2", 7));
        System.out.println("Queue is now :" + queue);
        queue.add(new Customer("c3", 3));
        System.out.println("Queue is now :" + queue);
        queue.add(new Customer("c4", 6));
        System.out.println("Queue is now :" + queue);
        queue.add(new Customer("c5", 5));

        System.out.println("Elements in queue");
        while (true) {
            Customer currentCust = queue.poll();
            if (currentCust == null) {
                break;
            }
            System.out.print(currentCust.getCustomerNum() + " <-- ");
        }
    }
}
4

1 に答える 1

1

>の代わりに使用したようです。次のように変更<します。compare

if (c1.priority > c2.priority)
    return 1;
if (c1.priority < c2.priority)
    return -1;
return 0;

編集:または、もう少し単純に:

return Integer.valueOf(c1.priority).compareTo(c2.priority);

編集2:またはJava 7を使用:

return Integer.compare(c1.priority, c2.priority);

于 2013-03-01T07:34:05.390 に答える