Junior — Middle
Paaiškinkite, kaip yra susiję equals ir hashCode metodai Java ir kodėl jų teisinga įgyvendinimas yra svarbus kolekcijų darbui.
sobes.tech AI
Atsakymas iš AI
Java kalbant, equals ir hashCode metodai yra glaudžiai susiję ir naudojami objektų palyginimui bei jų saugojimui kolekcijose, tokiose kaip HashMap, HashSet.
Taisyklės:
- Jei du objektai yra lygūs pagal
equalsmetodą (t.y.,a.equals(b) == true), jųhashCodeturi būti vienodi. - Jei objektų
hashCodeskiriasi,equalsturi grąžintifalse.
Kodėl tai svarbu:
Hash pagrįstos kolekcijos pirmiausia naudoja hashCode greitam paieškai, o tada equals tiksliai lygina objektus viduje. Jei šie metodai nėra teisingai įgyvendinti, objektai gali būti nerandami kolekcijoje, net jei jie logiškai yra lygūs.
Tinkamos įgyvendinimo pavyzdys:
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
MyClass myClass = (MyClass) o;
return field1.equals(myClass.field1) && field2 == myClass.field2;
}
@Override
public int hashCode() {
return Objects.hash(field1, field2);
}
Tinkama equals ir hashCode įgyvendinimas užtikrina teisingą kolekcijų veikimą ir išvengia klaidų paieškoje, pridėjime ir šalinime elementų.