PriorityQueue é uma lista que fica com seus elementos ordenados, e pode ter elementos repetidos; nesse ponto é diferente de um SortedSet.
Ela existe, por exemplo, para você poder implementar filas de prioridade - por exemplo, se a prioridade do Lula é 1 e a prioridade de você, pobre mortal, é 10, então ele fica na sua frente na fila, mesmo tendo chegado depois.
Alkamavo
Que comparação mais maluca…
hahahahaha
Lula e pobre mortal…
T
thingol1 like
importjava.util.*;classPar<TextendsComparable<T>,U>implementsComparable<Par<T,U>>{privateTt;privateUu;publicPar(Tt,Uu){this.t=t;this.u=u;}publicTgetT(){returnt;}publicUgetU(){returnu;}publicintcompareTo(Par<T,U>obj){returnt.compareTo(obj.getT());}publicStringtoString(){return"{"+t+","+u+"}";}}classPessoa{privateStringnome;publicPessoa(Stringnome){this.nome=nome;}publicStringtoString(){returnnome;}}classExemploPriorityQueue{publicstaticvoidmain(String[]args){PriorityQueue<Par<Integer,Pessoa>>pq=newPriorityQueue<Par<Integer,Pessoa>>();// A diferença entre "add" e "offer" é que add lança uma exceção se a fila estiver cheia,// e offer náo lança a tal exceção, mas isso é só para outras classes que implementam Queue.// Para PriorityQueue não há diferença alguma.pq.add(newPar<Integer,Pessoa>(10,newPessoa("Gabriel O Pensador")));pq.offer(newPar<Integer,Pessoa>(3,newPessoa("Gilberto Kassab")));pq.add(newPar<Integer,Pessoa>(2,newPessoa("Jose Serra")));pq.add(newPar<Integer,Pessoa>(3,newPessoa("Cesar Maia")));pq.add(newPar<Integer,Pessoa>(2,newPessoa("Sergio Cabral")));pq.add(newPar<Integer,Pessoa>(1,newPessoa("Luis Inacio Lula da Silva")));// Iterando sobre a priority queue - note que a ordem é indefinida; // for(Par<Integer,Pessoa>p:pq){System.out.println(p);}// Copiando a priority queue só para fazer uma demonstração.PriorityQueue<Par<Integer,Pessoa>>pqCopia=newPriorityQueue<Par<Integer,Pessoa>>();pqCopia.addAll(pq);// Imprimindo a priority queue na ordem de prioridade. // Note que a ordem de dois elementos com a mesma// prioridade é indefinida. Infelizmente, imprimir uma priority queue a destrói, // porque temos de usar "poll", que remove sempre o primeiro elemento da fila.System.out.println("-------------");for(Par<Integer,Pessoa>p=pq.poll();p!=null;p=pq.poll()){System.out.println(p);}// Imprimindo a priority queue, mas usando peek e remove.System.out.println("-------------");for(Par<Integer,Pessoa>p=pqCopia.peek();p!=null;){System.out.println(p);pqCopia.remove(p);p=pqCopia.peek();}// Mostrando que "element" lança uma exceção se a priority queue estiver vazia.// "element" é semelhant a "peek", exceto por esse fato.try{Par<Integer,Pessoa>p=pq.element();}catch(NoSuchElementExceptionex){ex.printStackTrace();}}}