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 arequals: ja divi objekti ir vienādi pēcequals, 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;
}
}