Vedo solo un'interfaccia di coda, non esiste una classe di coda nelle raccolte Java?Dov'è la classe Queue nelle Collezioni Java?
risposta
La documentazione per Queue
elenca varie implementazioni, tra cui
scegliere un applicazione che si adatta alle vostre esigenze.
Il Javadocs fornisce un elenco di classi che implementano Queue
.
tutte le classi di attuazione note:
AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue, DelayQueue, LinkedBlockingQueue, LinkedBlockingDeque, LinkedList, PriorityBlockingQueue, PriorityQueue, SynchronousQueue
Ci sono anche alcuni subinterfaces che potresti trovare utile:
Tutti Interfacce secondarie noti:
BlockingDeque < E>, BlockingQueue < E>, Deque < E>
Mi chiedo perché le persone non vanno a JavaDocs: P +1 – Perpetualcoder
non è Stack Overflow più veloce di Google? – IAdapter
Per le persone veramente pigre, noterò che tutti quelli con DeQue sono code a doppio attacco. – Powerlord
coda ha più implementazioni: dal API:
Tutto Classi di implementazione conosciute:
AbstractQueue, ArrayBlockingQueue, ArrayDeque, ConcurrentLinkedQueue,
DelayQueue, LinkedBlockingDeque, LinkedBlockingQueue, LinkedList,
PriorityBlockingQueue, PriorityQueue, SynchronousQueue
Si noti che AbstractQueue non è una classe concreta.
Alcuni di questi sono dal pacchetto simultaneo, quindi se si sta implementando un jobqueue o qualcosa di simile, si dovrebbe andare su ConcurrentLinkedQueue o PriorityBlockingQueue (per un heap) per ex.
http://java.sun.com/javase/6/docs/api/java/util/Queue.html - vedere la sezione "Tutte le classi di implementazione conosciute". Ci sono una varietà di implementazioni che sono adatte a scopi diversi.
Oltre a utilizzare i documenti API per trovare "tutte le classi di implementazione conosciute", spesso esistono altre implementazioni non pubbliche che sono comunque disponibili tramite l'API pubblica (solo senza richiedere risme di documentazione inutile). Se clicchi su "use" troverai anche Collections.asLifoQueue (Deque
è già un Queue
, ma è FIFO piuttosto che uno stack).
Ogni tanto riscopro le pagine "Usa" e penso, "Ehi, è grandioso!" E poi li ho dimenticati di nuovo. –
Le pagine "use" non hanno la più grande delle UI. –
Sebbene le risposte suonino un po 'sdegnose, in realtà sono piuttosto interessanti insegnandoti a pescare.Una coda è semplicemente un modo di guardare una collezione, quindi molte raccolte possono implementarla. Inoltre, le cose che agiscono come raccolte ma con una logica specifica (come le code di thread) potrebbero utilizzare la stessa interfaccia.
Sapere dove guardare i javadoc è di grande aiuto. Sono sicuro che hai guardato ma semplicemente non hai pensato di guardare alle implementazioni. Vivere e imparare.
A volte potrebbe anche essere necessario inseguire sottoclasse/estendere elenchi. Ad esempio, se hai guardato in coda e hai visto AbstractQueue, potresti voler vedere quali classi lo implementano.
sarò sbarazzarsi di uno dei tuoi -1S per ya :)
import java.util.Queue;
solo che
Enqueue function == Queue_Object.add(input_value);
Dequeue function == Queue_Object.pull(); //return the value and delete it from queue
No, non c'è nessuna classe Queue
, perché ci sono un sacco di modi diversi per implementare una coda e devi scegliere quella che si adatta al tuo caso d'uso. Lo stesso vale per qualsiasi altra raccolta nel framework delle raccolte: ad esempio, ArrayList
e LinkedList
implementano entrambi uno List
. Lo schema generale, che è un buon uso dell'ereditarietà degli oggetti, è:
L'interfaccia , ad es. Queue
, definisce il ruolo in cui si desidera riprodurre un oggetto;
Sottointerfacce, ad es. Deque
, espande ulteriormente o specializza il ruolo: in questo caso una coda "deque" o doppia coda consente di aggiungere e rimuovere elementi da entrambe le estremità della coda, invece di aggiungere solo alla parte posteriore e rimuovere dal fronte;
Le classi forniscono l'implementazione di come un oggetto svolge il ruolo. Ad esempio, un ArrayDeque
utilizza un array ridimensionabile per implementare una coda a doppio attacco, che presenta diversi punti di forza e punti deboli a LinkedList
che utilizza un elenco collegato.
di approfondire l'idea di un'interfaccia come un ruolo, si noti che anche se ArrayDeque
implementa Deque
, è possibile utilizzarlo come un Queue
senza doversi preoccupare di questo, perché l'attuazione entrambe le interfacce significa che può giocare entrambi i ruoli. Allo stesso modo, LinkedList
può indossare un cappello List
, Queue
o Deque
.
Per questo motivo, il modo normale (consigliato) di utilizzare qualcosa come il framework Collections è il programma nell'interfaccia, ovvero utilizzare un'interfaccia quando si utilizza la classe anziché il nome della classe stessa. Ad esempio, si istanzia un oggetto come questo:
Queue<String> logQueue = new ConcurrentLinkedQueue<String>();
...
logQueue.add("Log message");
In questo modo si è
- non legato ad una particolare classe e può utilizzare un rimpiazzo se necessario, senza dover modificare molto codice e
- documentano ciò che si sta facendo con un corso nominando il ruolo che esso svolge. Il principio generale a cui è utile è codice auto-documentante, che è essenzialmente quello di lasciare che il codice stesso sia autoesplicativo senza dover utilizzare commenti, ecc.
Queue<Integer> queue = new LinkedList<>();
queue.add(1);
queue.add(2);
queue.add(3);
while (!queue.isEmpty()) {
System.out.println(queue.remove());// prints 1 2 3
}
- 1. mutable vs. immutable nelle collezioni Scala
- 2. collezioni java vs mappa nel framework collezioni
- 3. Java Commons Collezioni removeAll
- 4. Java: sull'implementazione Collezioni ReverseComparator
- 5. Collezioni Java-like in PHP
- 6. Message Queue vs Task Queue difference
- 7. Come raggruppare utilizzando più colonne nelle collezioni di scala
- 8. Collezioni Java che mantengono l'ordine di inserzione
- 9. Collezioni in Adobe Flex
- 10. Java: come garantire le collezioni serializzabili
- 11. Java: uguale al metodo nella classe base e nelle sottoclassi
- 12. Stampa multipla di collezioni (nidificate) in Java
- 13. Collezioni in stile Java in Delphi
- 14. personalizzazione serializzazione delle collezioni Java utilizzando xstream
- 15. La deforestazione in collezioni Scala
- 16. Mock o simula Message Queue (JMS)
- 17. Cosa fa in realtà la Queue
- 18. Uso generici Java nelle interfacce
- 19. Big Queue Queue Time per l'app Rails su Heroku
- 20. Implementazione Java "Queed Queue" per produttori veloci, consumatori lenti
- 21. Come importare la classe java?
- 22. Quali sono i vantaggi di Blocking Queue in Java?
- 23. Dipendenza circolare nelle classi java
- 24. collezioni unmarshalling in JAXB
- 25. combinazione C# stack queue
- 26. Implementare cartesiana del prodotto delle collezioni da Java 8
- 27. Message Queue or Scheduler
- 28. JBoss JMS Remote Queue?
- 29. MassTransit Queue Maintenance
- 30. In memory queue server
Secondo http://java.sun.com/j2se/1.5.0/docs/api/java/util/ArrayList.html, ArrayList non significa implementare coda. –
Sì, me ne sono reso conto quando sono tornato per prendere alcuni link; ovviamente la mia memoria è difettosa. – Rob
Succede. Sarei rimasto colpito se avessi memorizzato l'intera libreria Java. Se avessi memorizzato EE, mi sarei allontanato lentamente. –