Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [JAVA] HashSet

Hybrid View

  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37
    Quote Originariamente inviata da andbin Visualizza il messaggio
    HashSet si basa sull'utilizzo del contratto tra equals/hashCode degli oggetti. Nel tuo Cliente non hai fatto un override di equals (il parametro deve essere Object!) ... ma un overload, che HashSet non sarebbe in grado di usare.
    E nota: HashSet quindi non si basa su Comparable/Comparator.

    Se ridefinisci correttamente equals(), devi ridefinire correttamente anche hashCode() per rispettare il contratto tra i due metodi. Se violi il contratto .... succedono altre "brutte" cose nel HashSet.


    P.S. Comparator non si implementa di norma nella classe degli oggetti da comparare! Ha generalmente poco senso. I Comparator (se ne possono avere N) si implementano in classi distinte dalla classe dei tuoi oggetti.

    Grazie tante ho risolto

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2015
    Messaggi
    37
    ma di quale contratto parli? perchè si utilizza hashCode ?

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da iTuring Visualizza il messaggio
    ma di quale contratto parli? perchè si utilizza hashCode ?
    Leggi la documentazione dei metodi hashCode() e equals() di Object.


    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

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da iTuring Visualizza il messaggio
    ma di quale contratto parli?
    E dopo che hai letto la documentazione che ti ha indicato LeleFT, prova a pensare perché la seguente semplice classe viola il contratto alla grande.

    codice:
    class Persona {
        private final String nome;
    
        public Persona(String nome) {
            this.nome = nome;
        }
    
        // ... getter ... altro ....
    
        public boolean equals(Object o) {
            if (o instanceof Persona) {
                Persona altraPersona = (Persona) o;
                return nome.equals(altraPersona.nome);
            } else {
                return false;
            }
        }
    }
    Quote Originariamente inviata da iTuring Visualizza il messaggio
    perchè si utilizza hashCode ?
    hashCode() viene usato principalmente nelle collezioni basate internamente su una struttura dati hash-table. Nel framework standard, principalmente nelle collezioni: HashMap, HashSet, LinkedHashMap e LinkedHashSet.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.