davidebarbieri93 ha scritto:
Salve a tutti come da titolo dovrei realizzare il codice di una coda FIFO. Non posso usare strutture dati già pronte quindi tutto da zero , utilizzando le interfacce giuste. Devo usare Queue<E>?come fare? grazie
Ok, iniziamo allora a chiarire alcune cose. Innanzitutto una coda "FIFO" vuol dire semplicemente che il primo dato che entra è anche il primo che esce. Tecnicamente è possibile realizzarla "bounded" (limitata) o "unbounded" (illimitata). Se è bounded, allora c'è un numero prefissato di celle mentre se è unbounded non ci sono limiti se non quelli intrinseci del linguaggio e/o di memoria della piattaforma.
E se è bounded chiaramente vuol dire che una operazione di "put" può o fallire subito (con eccezione o ritorno es. di false) oppure bloccare il thread corrente (se la coda è "bloccante") quando la coda è piena.
Nel framework di Java SE ci sono già implementazioni di code bounded/unbounded e comunque anche di altre collezioni che permettono di realizzarle. A te, evidentemente per questioni "didattiche", è stato chiesto di non usarle.
Poi parlavi di Queue (java.util.Queue, giusto?). Questa è una interfaccia presente nel framework. Se ti è stato chiesto che la tua
implementazione di coda implementi Queue, allora sì, devi usarla. Ma questo è solo per rispettare un contratto di una astrazione già esistente. Non sarebbe di per sé necessaria tecnicamente.
Se non puoi usare nulla del framework, devi per forza usare o
array (valido in particolare nel caso di coda bounded) oppure una
lista linkata con una
tua implementazione per realizzare i nodi (valido nel caso di coda unbounded).
Comunque, per continuare nel discorso, dovresti precisare:
a) Se la coda deve essere bounded o unbounded
b) Se deve essere "generica" (sfruttare i generics di Java 5) oppure no (e in tal caso per quale tipo specifico, es. String o al limite Object)
c) Se deve considerare meccanismi di blocking (per put in coda bounded se piena o in generale per get se vuota)