Sobes.tech
Junior — Middle
102

Java-да hashCode() және equals() әдістерінің сәйкестігі қалай қамтамасыз етіледі және бұл неге маңызды?

AI-дан жауап

sobes.tech AI

Java-да hashCode() және equals() әдістері сәйкес келуі керек, себебі коллекциялар, мысалы HashMap немесе HashSet, дұрыс жұмыс істеуі үшін. Ережелер:

  • Егер екі объект тең болса, онда олардың equals() нәтижесі true болуы керек, ал олардың hashCode() мәндері бірдей болуы керек.
  • Егер екі объектінің hashCode() мәндері әртүрлі болса, онда олардың equals() нәтижесі міндетті түрде false болуы керек.

Бұл маңызды, себебі хэш-кестелер алдымен hashCode() көмегімен тез іздеуді жүзеге асырады, содан кейін нақты салыстыру үшін equals() пайдаланады. Бұл шартты бұзу коллекциялар дұрыс жұмыс істемеуіне әкелуі мүмкін.

Мысал:

@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    Person person = (Person) o;
    return id == person.id;
}

@Override
public int hashCode() {
    return Objects.hash(id);
}