Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    2

    Implementazione set generico senza duplicati (era: Un piccolo aiuto informatico per favore..?)

    Ciao a tutti avrei un piccolo favore da chiedervi..

    Questa la consegna "Si richiede di progettare, realizzare e documentare il tipo di dato astratto ElasticSet<E>. ElasticSet è una collezione di oggetti omogenei generici in cui non sono presenti elementi duplicati. L'astrazione ElasticSet<E>, oltre ai metodi standard di Set<E> quali boolean add(E e), boolean remove(E e) boolean contains(E e) e boolean isEmpty(), include i metodi descritti dalla seguente tabella" [...]

    A parte i vari metodi che devo implementare, il mio dubbio è come fare l'implementazione del tipo stesso.

    Io ho fatto come segue, ma non ho ben capito che valori può assumere il tipo generico E, poiché devo fare poi metodi che ad esempio restituiscono l'elemento massimo, ma non mi permette di applicare gli operatori > e < (sono nuovo nel mondo di Java, e una volta capite certe cose credo riuscirò ad implementare i vari metodi senza troppi problemi).
    codice:
    public abstract class ElasticSet<E> implements Set<E>{ 
    
    // OVERVIEW: ElasticSet è una collezione di oggetti omogenei 
    // generici in cui non sono presenti elementi duplicati. 
    private Vector<E> elastic;   //è giusto usare Vector o meglio ArrayList? 
    
    //costruttori 
    
    public ElasticSet() 
    { 
        //EFFECTS: inizializza this alla collezione vuota. 
        elastic = new Vector<E>(); 
    }
    Quando mi chiede ad esempio di implementare glb(E e) /* Restituisce il più grande elemento della collezione che è minore o uguale all'elemento e, e null se tale elemento non esiste */

    io ho iniziato scrivendo questo, ma ovviamente non va perché non posso usare il "< e >" su <E>.
    codice:
    public E glb(E e)
    {
        //EFFECTS: (e=null) solleva NullPointerException, altrimenti restituisce il più grande
        //della collezione che è minore o uguale all'elemento e (greatest lower bound).
        //Se tale elemento non esiste, restituisce null.
    
        if(e==null) throw new NullPointerException("La collezione non esiste");
        int max = 0;
        for(int i =0; i<elastic.size(); i++)
        {
            if((elastic.get(i)> max)&&(elastic.get(i)<=e))
                max = elastic.get(i);
    Ultima modifica di MItaly; 10-11-2015 a 22:23 Motivo: Tag CODE & co., sezione errata, titolo

  2. #2

    Moderazione

    Ho sistemato un po' il tuo post, in particolare ho:
    - messo un titolo significativo;
    - spostato il thread nella sezione corretta (Java);
    - aggiunto i tag [CODE] ... [/CODE], senza i quali il codice non viene formattato correttamente (e non ha l'evidenziazione della sintassi), e reindentato il codice;
    - tolto un po' di formattazione spuria.

    In futuro ricordati di postare direttamente nella sezione giusta e di inserire il codice tra tag [CODE] ... [/CODE].
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Drusko Visualizza il messaggio
    Io ho fatto come segue, ma non ho ben capito che valori può assumere il tipo generico E
    Il E è una type-variable e lo devi vedere come una specie di "segnaposto". Il suo tipo non lo sai quale sarà realmente. A livello di bytecode, per effetto della "erasure", un E senza bounds viene tradotto in Object.

    Data la tua classe qualcuno potrà fare es.

    ElasticSet<String> s = new ElasticSet<String>();

    o

    ElasticSet<Date> s = new ElasticSet<Date>();

    o di qualunque altro tipo reference.

    Quote Originariamente inviata da Drusko Visualizza il messaggio
    ma non mi permette di applicare gli operatori > e <
    Qui non c'entrano i generics. Gli oggetti non si comparano con gli operatori relazionali. Entrano in gioco due interfacce definite nel framework: Comparable e Comparator. Tutti i concetti di ordinamento gestiti e forniti dal framework si basano su queste due interfacce standard.
    Il discorso sarebbe un po' più lungo ....

    Quote Originariamente inviata da Drusko Visualizza il messaggio
    private Vector<E> elastic; //è giusto usare Vector o meglio ArrayList?
    ArrayList e Vector sono entrambi delle liste, espandibili e indirizzate per indice. Tecnicamente sono diverse come implementazione, performance e per alcuni nomi di metodi.
    Per un esercizio "didattico" come il tuo non credo che la differenza sia rilevante (a meno che chi ti ha dato l'esercizio si aspetti qualcosa di preciso o abbia dato indicazioni in tal senso)


    P.S. visto che parli di ElasticSet, Set, metodo glb ecc... riconosco la correlazione con una discussione, proprio di oggi, su un altro forum:
    http://www.iprogrammatori.it/forum-p...le-t25994.html
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2015
    Messaggi
    2
    P.S. visto che parli di ElasticSet, Set, metodo glb ecc... riconosco la correlazione con una discussione, proprio di oggi, su un altro forum:
    http://www.iprogrammatori.it/forum-p...le-t25994.html

    Grazie. Davvero, grazie. Mi state salvando

Tag per questa discussione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.