Sobes.tech
Junior

Kāpēc Java ir nepieciešamas metodes equals un hashCode?

sobes.tech AI

Atbilde no AI

Java equals un hashCode metodes tiek izmantotas, lai pareizi salīdzinātu objektus un darbotos ar kolekcijām, kas balstītas uz hash tabulām (piemēram, HashMap, HashSet).

  • equals(Object o): Nosaka, vai pašreizējais objekts ir vienāds ar citu objektu. Noklusējuma versijā salīdzina atsauces uz objektu. Pārdefinē, lai salīdzinātu objektu iekšējo stāvokli.

  • hashCode(): Atgriež veselu skaitli (hash kodu) objekta. To izmanto kolekcijas, lai ātri meklētu elementus. Tam jābūt saskaņotam ar equals: ja divi objekti ir vienādi pēc equals, to hash kodiem jābūt vienādiem. Atgrieztā apgalvojuma pretējais nav pareizs.

Nepareiza vai neesoša šo metožu pārdefinēšana var novest pie nepareizas uzvedības, izmantojot objektus kolekcijās, piemēram, objekta neesamība Set pēc pievienošanas vai nespēja atrast objektu HashMap pēc atslēgas.

Piemērs pārdefinēšanai:

public class MyObject {
    private int id;
    private String name;

    public MyObject(int id, String name) {
        this.id = id;
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true; // Atsauču salīdzināšana
        if (o == null || getClass() != o.getClass()) return false; // Tips un null pārbaude

        MyObject that = (MyObject) o; // Tipa konvertēšana

        if (id != that.id) return false; // Lauku salīdzināšana
        return name != null ? name.equals(that.name) : that.name == null;
    }

    @Override
    public int hashCode() {
        int result = id; // Hash koda aprēķins pēc laukiem
        result = 31 * result + (name != null ? name.hashCode() : 0);
        return result;
    }
}