Sobes.tech
Middle

Millised on reeglid meetoditele equals ja hashCode?

sobes.tech AI

Vastus AI-lt

  1. Kui kaks objekti on võrdsed equals(Object) meetodi järgi, siis nende hash-koodid (mida tagastab hashCode()) peavad olema samad.
  2. Kui kaks objekti ei ole võrdsed equals(Object) meetodi järgi, siis nende hash-koodid võivad olla kas samad või erinevad. Hea tava on tagada erinevad hash-koodid mitte-võrdsetele objektidele, et parandada hash-põhiste kogude jõudlust.
  3. hashCode() meetod peaks tagastama samad väärtused samal objektil mitme kutsumise korral, kui kasutatud teave hash-koodi arvutamiseks ei ole muutunud.
  4. Sümmeetrilisus: iga a ja b objekti puhul, kui a.equals(b) on true, siis peab ka b.equals(a) olema true.
  5. Reeglilisus: iga mitte-null a objekti puhul, a.equals(a) peab olema true.
  6. Transitiivsus: iga a, b ja c objekti puhul, kui a.equals(b) on true ja b.equals(c) on true, siis peab ka a.equals(c) olema true.
  7. Kokkusobivus: iga mitte-null a ja b objekti puhul, mitmekordsed a.equals(b) kutsed peavad järjepidevalt tagastama true või false, kui equals(Object) kasutamisel olev teave ei ole muutunud.

Näide rakendamisest:

public class MyClass {

    private int value;
    private String name;

    public MyClass(int value, String name) {
        this.value = value;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        // Objektide identiteedi kontroll
        if (this == o) {
            return true;
        }
        // Objekti tüübi kontroll
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        // Tüübi konverteerimine
        MyClass myClass = (MyClass) o;
        // Väli võrdlus
        return value == myClass.value &&
               Objects.equals(name, myClass.name); // Kasutame Objects.equals null-ide jaoks
    }

    @Override
    public int hashCode() {
        // Kasutame Objects.hash, et genereerida hash-kood väli põhjal
        return Objects.hash(value, name);
    }

    // Teised meetodid...
}