Sobes.tech
Junior — Middle

როგორ ხდება hashCode() და equals() მეთოდების თანხვედრა Java-ში და რატომ არის ეს მნიშვნელოვანი?

sobes.tech AI

პასუხი AI-სგან

Java-ში, hashCode() და equals() მეთოდები უნდა იყოს შესაბამისი, რათა ობიექტები სწორად მუშაობდნენ კოლექციებში, როგორიცაა HashMap ან HashSet. წესები:

  • თუ ორი ობიექტი თანაბარია equals() მიხედვით, მათი 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);
}