Удаление верхней части PriorityQueue? - PullRequest
5 голосов
/ 20 декабря 2010

Предположим, что я использую класс PriorityQueue из Java.util.Я хочу удалить наибольшее число из PriorityQueue pq, которое, как мы предполагаем, находится в начале очереди.

Будет ли работать следующая функция?-примитивы тоже?

Ответы [ 2 ]

8 голосов
/ 20 декабря 2010

Queue#peek и Queue#element возвращают значение заголовка очереди, Queue#poll и Queue#remove возвращают и удаляют it.

Похоже,

int head = pq.poll();

это то, что вы хотите.

И: он будет только работать для непримитивных значений, поскольку в очереди будут храниться только объекты. Хитрость в том, что (я полагаю) ваша очередь хранит значения Integer, а Java 1.5+ может автоматически преобразовывать результаты в int примитивы (исходящие). Так что чувствует , как в очереди хранятся int значений.

4 голосов
/ 20 декабря 2010

peek() - вернуть, но не удалить значение головы

poll() - возврат и удаление значения головки

        PriorityQueue<Integer> pq = new PriorityQueue<Integer>();

        pq.add(2);pq.add(3);

        System.out.println(pq); // [2, 3]
        System.out.println(pq.peek()); // head 2
        System.out.println(pq); // 2 still exists. [2, 3]
        System.out.println(pq.poll()); // 2. remove head (2)
        System.out.println(pq); // [3]
...