2

我想将一些 int 推送到优先队列,但我不能!我使用了 queue.add() 代码,但此代码将返回排序后的队列,请帮助,谢谢!

4

3 回答 3

2

push/pop为堆栈抽象数据类型明确定义了一个操作;我不确定队列(甚至优先级队列)是否有意义。

PriorityQueueimplementsQueue, 它只指定add/remove. 另一方面, a Dequehas addFirst/Last,removeFirst/Last等。也许其中一个就是您要寻找的。


一个例子

PriorityQueue这是一个使用of的示例,使用比较长度String的自定义Comparator

    Queue<String> queue = new PriorityQueue<String>(
        100, new Comparator<String>() {
            @Override public int compare(String s1, String s2) {
                return Integer.valueOf(s1.length()).compareTo(s2.length());
            }
        }
    );
    queue.add("Sally");
    queue.add("Amy");
    queue.add("Alice");

    System.out.println(queue);
    // "[Amy, Sally, Alice]"

    System.out.println(queue.remove());
    // "Amy"

    System.out.println(queue.remove());
    // "Alice"

    queue.add("Tina");
    System.out.println(queue.remove());
    // "Tina"

正如预期的那样,将给出队列PriorityQueue中最短的. 同样如指定的那样,关系被任意打破。Stringremove

相关问题

PriorityQueue

ComparatorComparable

于 2010-06-20T09:55:10.050 回答
0

我想将一些 int 推送到优先队列

“推送”是堆栈操作,而不是队列操作。

但我不能!我使用了 queue.add() 代码,但此代码将返回已排序的队列

不,不会的。PriorityQueue 仅出于移除队列头部的目的进行排序。

你的问题没有多大意义。如果要推送,请使用堆栈。如果您不想要 PriorityQueue 的功能,请不要使用它。

你的实际问题到底是什么?

于 2010-06-20T10:12:05.157 回答
0

优先级队列的全部意义在于它首先返回最小的条目(或者更确切地说,出现在排序列表中的第一个元素)。如果这不是您想要的,您可能不想要一个直接的 PriorityQueue。

您可以做的是创建一个类,该类具有一个 PriorityQueue 用于通常的东西,以及一个用于“紧急情况”的堆栈。有一个将东西添加到堆栈的 push(T) 方法,以及一个添加到队列的 add(T) 方法。无论哪种方法获取下一个元素,如果那里有任何东西,都应该将其从堆栈中删除,否则它会获取队列的下一个元素。

于 2010-06-20T10:13:34.597 回答