нажмите в очереди приоритетов - PullRequest
2 голосов
/ 20 июня 2010

Я хочу добавить немного int в очередь priority, но не могу!Я использовал код queue.add (), но этот код вернет отсортированную очередь, пожалуйста, помогите, спасибо!

Ответы [ 3 ]

2 голосов
/ 20 июня 2010

A push/pop операция четко определена для абстрактного типа данных стека; Я не уверен, имеет ли это смысл для очереди (или даже для очереди с приоритетами).

PriorityQueueimplementsQueue, который указывает только add/remove. С другой стороны, Deque имеет addFirst/Last, removeFirst/Last и т. Д. Возможно, один из них - то, что вы ищете.


Пример

Вот пример использования PriorityQueue из 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 даст самое короткое String в очереди после remove. Также, как указано, связи нарушаются произвольно.

Похожие вопросы

Вкл. PriorityQueue

Вкл. Comparator и Comparable

0 голосов
/ 20 июня 2010

Весь смысл очереди с приоритетами состоит в том, что она сначала возвращает наименьшую запись (точнее, первый элемент, который появится в отсортированном списке). Если это не то, что вы хотите, вы, вероятно, не хотите прямой PriorityQueue.

Что вы можете сделать, это создать класс, у которого есть PriorityQueue для обычных вещей и стек для «аварийных ситуаций». Есть метод push (T), который добавляет вещи в стек, и метод add (T), который добавляет в очередь. Какой бы метод ни получил следующий элемент, он должен удалить его из стека, если он там есть, иначе он получит следующий элемент очереди.

0 голосов
/ 20 июня 2010

Я хочу подтолкнуть некоторых int к PriorityQueue

«Push» - это операция стека, а не операция очереди.

но я не могу! я использовал queue.add (), но этот код вернуть отсортированную очередь

Нет, не будет. PriorityQueue сортируется только с целью удаления заголовка очереди.

Ваш вопрос не имеет особого смысла. Если вы хотите подтолкнуть, используйте стек. Если вы не хотите, что делает PriorityQueue, не используйте его.

В чем конкретно состоит ваша актуальная проблема?

...