Creare FIFO java

di il
7 risposte

Creare FIFO java

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

7 Risposte

  • Re: Creare FIFO java

    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)
  • Re: Creare FIFO java

    Per chiarire la limitazione di ciò che posso usare , ad esempio , ti dico che non posso usare java.util.stack ma devo scrivere io il codice di uno stack .
    Poi deve essere unbounded , e il tipo di dati è Object(un'oggetto definito da me).
    Posso andare traquillo che non verranno eseguiti get su liste vuote.
  • Re: Creare FIFO java

    davidebarbieri93 ha scritto:


    non posso usare java.util.stack ma devo scrivere io il codice di uno stack .
    uno stack è LIFO ... non FIFO.

    davidebarbieri93 ha scritto:


    Poi deve essere unbounded
    Ok, in questi casi è appropriata una lista linkata e visto che non puoi usare implementazioni già esistenti di liste, devi fartela tu con una tua classe es. Nodo

    davidebarbieri93 ha scritto:


    e il tipo di dati è Object(un'oggetto definito da me).
    Un conto è avere un metodo es.

    void aggiungi(Object elemento)

    e un altro è avere la classe "generica" es. Coda<E> ed avere

    void aggiungi(E elemento)

    davidebarbieri93 ha scritto:


    Posso andare traquillo che non verranno eseguiti get su liste vuote.
    Sì ma un qualche comportamento in tal caso lo devi comunque prevedere ... anche solo un banale: se è vuota ritorno null.

    Detto questo, hai già scritto del codice oppure no? E quali sono i tuoi dubbi/problemi?
  • Re: Creare FIFO java

    Penso di avere piu o meno risolto utilizzando la linked list. Il problema era capire come creare una struttura dati dinamica che mi fornisse operazioni simili a FIFO. Tuttavia , per eseguire un ciclo for sugli elementi di una struttura questa deve implementare Iterable<>?
  • Re: Creare FIFO java

    davidebarbieri93 ha scritto:


    Penso di avere piu o meno risolto utilizzando la linked list.
    java.util.LinkedList? Se sì mi sfugge la parte "Non posso usare strutture dati già pronte".
  • Re: Creare FIFO java

    Giusto-.-..e allora non ho idea. Come faccio a creare una FIFO senza nessuna struttura dati già predefinita ?
  • Re: Creare FIFO java

    davidebarbieri93 ha scritto:


    Giusto-.-..e allora non ho idea. Come faccio a creare una FIFO senza nessuna struttura dati già predefinita ?
    Realizzi una tua implementazione di lista basata su nodi linkati. Poi puoi scegliere tu se fare prima una classe apposita es. ListaLinkata che nasconde i dettagli interni (e i nodi) e poi usarla nella tua classe Coda .... oppure implementare direttamente la gestione dei nodi nella classe Coda.

    Quando si implementa una lista linkata la soluzione generalmente preferibile è quella di nascondere gli oggetti dei nodi e anche la classe stessa che modella i nodi. In java.util.LinkedList è proprio così. Internamente usa una sua classe privata che descrive i nodi ma tu dall'esterno non "vedi" assolutamente nulla di tutto questo, vedi solo i metodi esposti da LinkedList es. add(E e), addFirst(E e) ecc...
Devi accedere o registrarti per scrivere nel forum
7 risposte