Sobes.tech
Junior

Aký je rozdiel medzi metódami equals a hashCode v Jave?

sobes.tech AI

Odpoveď od AI

Metóda equals sa používa na porovnanie objektov za rovnosť ich obsahu, zatiaľ čo hashCode vracia celé číslo, ktoré predstavuje hash kód objektu.

Hlavné rozdiely:

  • Účel: equals na určenie logickej rovnosti, hashCode na generovanie hash kódu (zvyčajne na použitie v hashových štruktúrach dát).
  • Výsledok: equals vracia boolean (true alebo false), hashCode vracia int.
  • Zmluva: Ak sú dva objekty rovnaké podľa equals, ich hashCode musia byť rovnaké. Opak nie je pravdivý: objekty s rovnakým hashCode môžu mať odlišný obsah (kolízia).
  • Použitie: equals sa používa na porovnávanie objektov vo dvojiciach. hashCode sa používa v hashových kolekciách (napríklad HashSet, HashMap) na rýchle vyhľadávanie objektov.

Príklad:

// Príklad triedy
class MyObject {
    private int id;
    private String name;

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

    // Prepisovanie equals
    @Override
    public boolean equals(Object o) {
        if (this == o) return true; // Kontrola identity
        if (o == null || getClass() != o.getClass()) return false; // Kontrola typu a null
        MyObject myObject = (MyObject) o; // Typová konverzia
        return id == myObject.id && Objects.equals(name, myObject.name); // Porovnanie polí
    }

    // Prepisovanie hashCode
    @Override
    public int hashCode() {
        return Objects.hash(id, name); // Generovanie hash kódu na základe polí
    }
}

Je dôležité prepisovať obe metódy (equals a hashCode) spoločne, ak je prepisovaná jedna z nich, aby sa neporušil kontrakt a zabezpečila správna funkcia kolekcií.