La interfície Queue està disponible al paquet java.util i amplia la interfície Col·lecció. S'utilitza per mantenir els elements que es processen de la manera First In First Out (FIFO). És una llista ordenada d'objectes, on la inserció d'elements es produeix al final de la llista i l'eliminació d'elements al començament de la llista.
En ser una interfície, la cua requereix, per a la declaració, una classe concreta, i les classes més habituals són les LinkedList i PriorityQueue en Java. Les implementacions realitzades per aquestes classes no són segures per a fils. Si cal tenir una implementació segura per a fils, PriorityBlockingQueue és una opció disponible.
Declaració de la interfície de cua
public interface Queue extends Collection
Mètodes de la interfície de cua de Java
Mètode | Descripció |
---|---|
afegir booleà (objecte) | S'utilitza per inserir l'element especificat en aquesta cua i retornar true en cas d'èxit. |
oferta booleana (objecte) | S'utilitza per inserir l'element especificat en aquesta cua. |
Eliminar objecte() | S'utilitza per recuperar i eliminar el cap d'aquesta cua. |
Enquesta d'objectes() | S'utilitza per recuperar i eliminar el cap d'aquesta cua, o retorna null si aquesta cua està buida. |
Element d'objecte() | S'utilitza per recuperar, però no eliminar, el cap d'aquesta cua. |
Vista de l'objecte() | S'utilitza per recuperar, però no elimina, la capçalera d'aquesta cua, o retorna null si aquesta cua està buida. |
Característiques d'una cua
A continuació es mostren algunes característiques importants d'una cua.
- Com s'ha comentat anteriorment, el concepte FIFO s'utilitza per a la inserció i la supressió d'elements d'una cua.
- La cua de Java proporciona suport per a tots els mètodes de la interfície de col·lecció, com ara la supressió, la inserció, etc.
- PriorityQueue, ArrayBlockingQueue i LinkedList són les implementacions que s'utilitzen amb més freqüència.
- Es genera l'excepció NullPointerException, si es realitza alguna operació nul·la a BlockingQueues.
- Aquelles cues que estan presents al útil paquet es coneixen com a cues il·limitades.
- Aquelles cues que estan presents al útil paquet es coneixen com a cues limitades.
- Totes les cues excepte les Deques facilita l'eliminació i la inserció al capdavant i la cua de la cua; respectivament. De fet, deques suporta la inserció i l'eliminació d'elements als dos extrems.
Classe PriorityQueue
PriorityQueue també és una classe que es defineix al marc de col·lecció que ens ofereix una manera de processar els objectes en funció de la prioritat. Ja s'ha descrit que la inserció i la supressió d'objectes segueix el patró FIFO a la cua de Java. Tanmateix, de vegades cal que els elements de la cua es processin segons la prioritat, és aquí on entra en acció una PriorityQueue.
Declaració de classe PriorityQueue
Vegem la declaració de la classe java.util.PriorityQueue.
public class PriorityQueue extends AbstractQueue implements Serializable
Exemple de Java PriorityQueue
Nom de l'arxiu: TestCollection12.java
import java.util.*; class TestCollection12{ public static void main(String args[]){ PriorityQueue queue=new PriorityQueue(); queue.add('Amit'); queue.add('Vijay'); queue.add('Karan'); queue.add('Jai'); queue.add('Rahul'); System.out.println('head:'+queue.element()); System.out.println('head:'+queue.peek()); System.out.println('iterating the queue elements:'); Iterator itr=queue.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } queue.remove(); queue.poll(); System.out.println('after removing two elements:'); Iterator itr2=queue.iterator(); while(itr2.hasNext()){ System.out.println(itr2.next()); } } }Prova-ho ara
Sortida:
head:Amit head:Amit iterating the queue elements: Amit Jai Karan Vijay Rahul after removing two elements: Karan Rahul Vijay
Exemple de Java PriorityQueue: llibre
Vegem un exemple de PriorityQueue on estem afegint llibres a la cua i imprimint tots els llibres. Els elements de PriorityQueue han de ser de tipus Comparable. Les classes String i Wrapper són comparables per defecte. Per afegir objectes definits per l'usuari a PriorityQueue, heu d'implementar la interfície Comparable.
comparar en cadena
Nom de l'arxiu: LinkedListExample.java
import java.util.*; class Book implements Comparable{ int id; String name,author,publisher; int quantity; public Book(int id, String name, String author, String publisher, int quantity) { this.id = id; this.name = name; this.author = author; this.publisher = publisher; this.quantity = quantity; } public int compareTo(Book b) { if(id>b.id){ return 1; }else if(id <b.id){ return -1; }else{ 0; } public class linkedlistexample { static void main(string[] args) queue priorityqueue(); creating books book b1="new" book(121,'let us c','yashwant kanetkar','bpb',8); b2="new" book(233,'operating system','galvin','wiley',6); b3="new" book(101,'data communications & networking','forouzan','mc graw hill',4); adding to the queue.add(b1); queue.add(b2); queue.add(b3); system.out.println('traversing elements:'); traversing elements for(book b:queue){ system.out.println(b.id+' '+b.name+' '+b.author+' '+b.publisher+' '+b.quantity); queue.remove(); system.out.println('after removing one record:'); < pre> <p> <strong>Output:</strong> </p> <pre>Traversing the queue elements: 101 Data Communications & Networking Forouzan Mc Graw Hill 4 233 Operating System Galvin Wiley 6 121 Let us C Yashwant Kanetkar BPB 8 After removing one book record: 121 Let us C Yashwant Kanetkar BPB 8 233 Operating System Galvin Wiley 6 </pre> <hr></b.id){>