Sobes.tech
Middle

Koja su pravila za metode equals i hashCode?

sobes.tech АИ

Одговор од АИ

  1. Ako su dva objekta jednaka prema metodi equals(Object), njihovi hash kodovi (koji se vraćaju metodom hashCode()) moraju biti isti.
  2. Ako dva objekta nisu jednaka prema metodi equals(Object), njihovi hash kodovi mogu biti isti ili različiti. Dobra praksa je osigurati različite hash kodove za nejednake objekte radi bolje performanse kolekcija zasnovanih na hash-u.
  3. Metoda hashCode() treba da vraća iste vrednosti za isti objekat pri višestrukim pozivima, pod uslovom da se informacije koje se koriste za izračunavanje hash-a nisu promenile.
  4. Simetrija: za bilo koja a i b, ako je a.equals(b) true, onda b.equals(a) takođe mora biti true.
  5. Refleksivnost: za bilo koji nenull a, a.equals(a) mora biti true.
  6. Transitivnost: za bilo koja a, b i c, ako je a.equals(b) true i b.equals(c) true, onda a.equals(c) takođe mora biti true.
  7. Doslednost: za bilo koja nenull a i b, višestruki pozivi a.equals(b) treba da vraćaju konzistentno true ili false, pod uslovom da se informacije koje se koriste u equals(Object) nisu promenile.

Primer implementacije:

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) {
        // Provera identiteta objekata
        if (this == o) {
            return true;
        }
        // Provera tipa objekta
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        // Kastovanje
        MyClass myClass = (MyClass) o;
        // Poređenje po poljima
        return value == myClass.value &&
               Objects.equals(name, myClass.name); // Korišćenje Objects.equals za null
    }

    @Override
    public int hashCode() {
        // Korišćenje Objects.hash
        return Objects.hash(value, name);
    }

    // Ostale metode...
}