Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339

    Dubbio su un metodo equals

    Ciao a tutti.

    Mi sono imbattuto in un esercizio svolto in cui si fa l'override del metodo equals per confrontare due oggetti di tipo "Memoria".

    Ogni oggetto Memoria contiene degli oggetti Variabile.

    Non ho capito bene come il metodo verifica l'uguaglianza dei due oggetti:

    codice:
    @Override
    public boolean equals(Object o){
    if(o==this) return true;
    if(o==null) return false;
    if(!(o instanceof Memoria)) return false;
    Memoria m = (Memoria)o;
    for(Variabile v : this)
     if(!m.contains(v)) return false;
     for(Variabile v : m)
      if(!this.contains(v)) return false;
    return true;
    il metodo contains itera l'oggetti this per vedere se contiene la variaile v.

    Questo equals non fa il confronto due volte?

    Cioè basterebbe fare l confronto una sola volta :

    codice:
    @Override
    public boolean equals(Object o){
    if(o==this) return true;
    if(o==null) return false;
    if(!(o instanceof Memoria)) return false;
    Memoria m = (Memoria)o;
    for(Variabile v : this)
     if(!m.contains(v)) return false;
    return true;
    O forse ho interpretato male io?

    Aiutatemi

    CIAO

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    io dico di no, perché controlli due cose differenti:
    Pensa di avere due insiemi A e B.I due sono uguali se e solo se tutto A è in B e tutto B è in A.
    Il fatto che tutto A sia in B non assicura il contrario.
    Stai testando quello
    RTFM Read That F*** Manual!!!

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

    Re: Dubbio su un metodo equals

    Originariamente inviato da Markus85
    Ogni oggetto Memoria contiene degli oggetti Variabile.

    codice:
    for(Variabile v : this)
    Dovresti chiarire, perlomeno a me, perché stai facendo un "for-each" sul this.
    La tua classe è Iterable? Se sì, iterabile di che cosa? E poi "contiene degli oggetti Variabile", quanti e come (e se centra con Iterable)?

    Senza capire questo, è un po' difficile dire se è ok o no.
    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
    Aug 2002
    Messaggi
    8,013
    a parte che senza parentesi grafe quel codice è disgustosamente illegibile, comunque il concetto è questo: considera Memoria m1 e m2

    m1 contiene
    Variabile v1, v2, v3

    m2 contiene
    Variabile v1, v2, v3, v4

    se tu verifichi solo se il set di Variabile di m1 sia contenuto in m2 per dire se m1 e m2 sono uguali otterrai true. Ma m2 contiene anche un Variabile, v4, non contenuto in m1. Ergo, bisogna verificare che anche tutto quanto contenuto in m2 sia contenuto in m1.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    si io ho dato per scontato che le operazioni fossero valide e che ci fossero problemi a capire perché fai la doppia iterazione

    sulle Collection io faccio un controllo diverso

    codice:
    boolean ret = true; 
    List A ;
    List B; 
    
    if (A.size() == B.size()){
    //con buona probabilità sono uguali
     for (Object a1 : A){
        if (!b.contains(a1) ){
            ret = false; 
            break;  
       }
     }
    }else {
      ret = false; 
    }
    return ret;
    RTFM Read That F*** Manual!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Giusto!

    Grazie per l'aiuto ragazzi!

    CIAO

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Io però non ho ancora capito perché facevi/fai il for-each sul this. Giusto per curiosità mia ... eh!
    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.