HashSet-ə eyni obyektlər əlavə edərkən niyə hashCode və equals metodlarını yenidən təyin etmək lazımdır?
sobes.tech Süni İntellekt
AI-dan cavab
Java-da HashSet elementləri saqlamaq üçün xesh-cədvəl istifadə edir. İki obyektin eyni olub-olmadığını düzgün müəyyən etmək və təkrarlamaları qarşısını almaq üçün HashSet hashCode() və equals() metodlarına əsaslanır.
hashCode()metodu obyektin xesh kodunu hesablayır və bu, onun hansı "konteyner" (bucket) içində yerləşdiriləcəyini müəyyən edir.equals()metodu iki obyekti bərabərliyinə görə müqayisə edir.
Əgər bu metodları sinfinizdə yenidən yazmasanız, Object sinifinin tətbiqi istifadə olunacaq və bu, obyektləri referansa görə müqayisə edir (yəni, iki fərqli obyekt eyni məlumatlara malik olsa da, fərqli hesab olunur).
Buna görə, HashSet-in düzgün şəkildə eyni obyektləri tanıması və təkrarlamaları qarşısını alması üçün, hashCode() və equals() metodlarını obyektin vacib sahələrini nəzərə alacaq şəkildə yenidən yazmaq lazımdır.
Nümunə:
@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.equals(myClass.field2);
}
@Override
public int hashCode() {
return Objects.hash(field1, field2);
}
Bunun olmaması HashSet-in eyni məlumatlara malik bir neçə obyekt saxlaya bilməsinə səbəb olur ki, bu da toplusunun məntiqini pozur.