Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [Java] Set ed HashSet

  1. #1
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,501

    [Java] Set ed HashSet

    Sto guardando degli esempi di codice e non capisco la differenza tra Set ed HashSet.
    Ad esempio
    codice:
    public class Persona {
       private final String nome;
       private HashSet<Azienda> insieme_link;
       public Persona(String n) {
          nome = n;
          insieme_link = new HashSet<Azienda>();
       }
    ...
    }
    codice:
    public final class GestioneRubrica {
       public static Set<String> tuttiNumTel(Persona p1, Persona p2) {
          Set<String> result = p1.getNumTel();
          Iterator<String> it = p2.getNumTel().iterator();
          while(it.hasNext())
             result.add(it.next());
          return result;
       }
    ...
    }
    Non comprendo cosa cambi usando uno o l'altro, me lo sapreste spiegare?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315

    Moderazione

    Java... nel forum Java.

    Sposto.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280

    Re: [Java] Set ed HashSet

    Originariamente inviato da Alhazred
    Sto guardando degli esempi di codice e non capisco la differenza tra Set ed HashSet.
    Set è semplicemente la interfaccia che descrive in generale (e in modo "astratto") i metodi che un "set" deve avere. HashSet è una classe che fornisce una implementazione "concreta" di un "set" basato su hash-table interna.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,501
    Prendiamo un attimo questo esempio
    codice:
    public static int periodoPiuLungo(Persona p) {
       int max = 0;
       Set<TipoLinkHaLavorato> temp = p.getLinkHaLavorato();
       Iterator<TipoLinkHaLavorato> it = temp.iterator();
       while(it.hasNext()) {
          TipoLinkHaLavorato lnk = it.next();
          int durata = lnk.getAnnoFine() - lnk.getAnnoInizio() + 1;
          if (durata > max)
             max = durata;
       }
       return max;
    }
    Sarebbe stato un errore usare HashSet invece di Set? Se si, perché?

    Sostituire le due righe
    Set<TipoLinkHaLavorato> temp = p.getLinkHaLavorato();
    Iterator<TipoLinkHaLavorato> it = temp.iterator();

    con
    Iterator<TipoLinkHaLavorato> it = p.getLinkHaLavorato().iterator();

    creerebbe problemi?

  5. #5
    Utente di HTML.it L'avatar di Pastore12
    Registrato dal
    Oct 2008
    Messaggi
    1,051
    Sarebbe stato un errore usare HashSet invece di Set? Se si, perché?
    Forse.
    Cosa restituisce la funzione getLinkHaLavorato()? Se restituisce oggetti di tipo HashSet, allora puoi usare tranquillamente HashSet. E visto che un HashSet è anche un Set, anche l'uso di Set non crea problemi.

    Al contrario un oggetto di tipo Set non necessariamente è di tipo HashSet, potrebbe essere, ma se il metodo dichiara di ritornare Set sarebbe comunque meglio utilizzare Set.

    creerebbe problemi?
    No, se la variabile temp non ti serve a niente puoi tranquillamente sopprimerla.
    "Ethics are to me something private. Whenever you use it as an argument for why somebody_else should do something, you’re no longer being ethical, you’re just being a sanctimonious dick-head"
    Linus Torvalds

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,501
    La funzione getLinkHaLavorato() ritorna un Set, quindi a questo punto deve per forza di cose essere così.
    Grazie

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.