Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [java] LinkedList e Set

    salve ragazzi,
    ho un problema riguardo una lista di oggetto che devo visualizzare.
    In pratica ho una lista di "miscele" dove ognuna ha una lista di colori.
    adesso a me interessa visualizzare una lista di colori disponibili(che sono quelli che si trovano all'interno di tutte le miscele).

    allora ho provato a prendermi intanto la lista di tutti i colori di tutte le miscele,con i relativi doppioni ovviamente, ma a me interessa togliere questi doppioni.
    Ho provato a fare:
    HashSet<Colore> listaColori=new HashSet<Colore>(lista);

    dove "lista" è la lista dei colori coi doppioni, ma niente ricevo sempre i doppioni.
    come potrei fare? grazie

  2. #2
    Ritrovi i doppioni anche nell'HashSet perchè per java sono due istanze diverse dell'oggetto, quindi anche se tutti e due rappresentano il colore rosso vengono visti come 2 oggetti distinti.

    Doresti ciclare la lista e cscartare i Colore duplicati.

  3. #3
    ah quindi dovrei fare con un ciclo for(facendo un equals col nome per ogni oggetto ) e rimuoverlo?

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    In teoria se hai ridefinito correttamente il metodo equals all'interno di Colore non ti serve altro...

    Stando alla documentazione di Set (implementata da HashSet):

    A collection that contains no duplicate elements. More formally, sets contain no pair of elements e1 and e2 such that e1.equals(e2), and at most one null element.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    ma non capisco in che modo ridefinirlo.

    io ho fatto questo ciclo:
    codice:
    for(Iterator<Colore> it=lista.iterator();it.hasNext();){ 
    Colore c=it.next(); 
    if(c.getNome().equalsIgnoreCase(NON SO COSA)) 
     it.remove(); 	
    }
    il problema è proprio cosa mettere su "NON SO COSA"

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da TommyR222
    ma non capisco in che modo ridefinirlo.
    Hai una classe Colore, giusto? Avrà degli attributi, no?
    Quand'è che per te due istanze di Colore sono considerabili "uguali"? Ecco, metti questa definizione in equals e sei a posto...

    codice:
    public class Colore {
       ...
     
       @Override
       public boolean equals(Object obj) {
          // scrivi qui quando per te due oggetti di tipo Colore sono uguali
       }
    }
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    public boolean equals(Colore c){
    return nome.equalsIgnoreCase(c.getNome());
    }

    credo sia giusta..adesso quando vado a fare l'eliminazione faccio questo controllo??

  8. #8
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da TommyR222
    public boolean equals(Colore c){
    return nome.equalsIgnoreCase(c.getNome());
    }

    credo sia giusta..adesso quando vado a fare l'eliminazione faccio questo controllo??
    No. Tu stai facendo l'overloading di equals, io ti ho detto di fare l'override, non è la stessa cosa.

    E no, non devi fare alcun controllo aggiuntivo, ci pensa l'implementazione di Set a farlo.
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  9. #9
    trovo dei problemi anche se dovrebbe essere banale, poichè non ho mai fatto l'override di un metodo

    potresti gentilmente aiutarmi su come imporre uguali due oggetti Colore aventi "nome" uguale?
    grazie

  10. #10
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da TommyR222
    trovo dei problemi anche se dovrebbe essere banale, poichè non ho mai fatto l'override di un metodo

    potresti gentilmente aiutarmi su come imporre uguali due oggetti Colore aventi "nome" uguale?
    grazie
    Si tratta proprio di tre righe in croce..

    codice:
    public class Colore {
       ...
     
       @Override
       public boolean equals(Object obj) {
          if (obj == null || !(obj instanceof Colore)) {
             return false;
          }
    
          if (obj == this) {
             return true;
          }
    
          Colore c = (Colore) obj;
    
          return this.nome.equals(c.getNome());
       }
    
    }



    ps: con una ricerca su google avresti risolto in 5 minuti
    https://www.google.it/search?hl=en&t...e+equals&btnG=
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

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.