2016-05-26 4 views
0

Я изучал Java и пытался узнать приоритетную очередь в коллекциях. Я попытался с ниже, например с одного сайта: пришлиКак установить приоритет в очереди приоритетов

import java.util.*;  
class S 
{ 
    public static void main(String args[]) 
    { 
     PriorityQueue<String> queue=new PriorityQueue<String>(); 
     queue.add("Amit"); 
     queue.add("Vijay"); 
     queue.add("Karan"); 
     queue.add("Rahul"); 
     queue.add("Jai"); 

     System.out.println("iterating the queue elements:"); 
     Iterator<String> itr=queue.iterator(); 
     while(itr.hasNext()) 
     { 
      System.out.println(itr.next()); 
     } 
    } 
} 

здесь результаты ниже:

Amit 
Jai 
Karan 
Vijay 
Rahul` 

Я ожидал, что результат, как:

Amit 
Vijay 
Karan 
Rahul 
Jai 

Я не могу понять, как результат изменяется от моего ожидания и какой тип нормального или приоритетного значения используется.
В случае, если я хочу получить тот же результат в соответствии с моим ожиданием, что мне делать, используя prioiryqueue?

Пожалуйста, помогите мне.

Здесь я хочу точную причину заказа по умолчанию в очереди приоритетов.

+0

Для сортировки данных вам необходимо использовать компаратор. – sauumum

ответ

1

Цитирование Javadoc из PriorityQueue:

итератора предусмотрено в методе iterator() является не гарантированно проходить элементы приоритетной очереди в определенном порядке.

Как вы можете видеть, упорядочение PriorityQueue не имеет значения при использовании iterator(). Теперь, если вы начали принимать значения из очереди с помощью poll(), вы получите значения в лексикографическом порядке, то есть натуральный заказ от String.

Если вам нужна очередь, которая возвращает элементы в порядке размещения, используйте обычную реализацию Queue, такую ​​как LinkedList или ArrayDeque.

+0

Просто еще одна вещь..а по моему вопросу, я проверил с помощью Debug в eclipse, и очередь показывает тот же порядок элементов, что итератор показывает. Я также попытался понять лексикографию, но все же не могу понять, как это было вставлено для стандартного заказа. –

+0

@SumitKumarAgarwal Для 'PriorityQueue' * порядок * (по умолчанию или иначе) применяется к' poll() 'и' remove() ', а не к' iterator() '. Eclipse использует 'toString()' для отображения и который внутренне использует 'iterator()'. Eclipse также показывает массив поддержки с именем 'queue', который представляет собой плоское представление сбалансированного двоичного дерева, что также объясняет странный порядок итерации. – Andreas