Junior
hashCode metodidan nima uchun foydalaniladi?
sobes.tech AI
AIdan javob
Java va Kotlin'da hashCode() metodi ob'ektni ifodalaydigan butun son qiymatini ishlab chiqarish uchun ishlatiladi. U hash jadval asosidagi kolleksiyalar (HashMap, HashSet, Hashtable) bilan ishlashda muhim rol o'ynaydi, bu yerda u ob'ekt joylashgan yoki qidiriladigan "konteyner" (bucket) ni tez aniqlash uchun ishlatiladi. Asosiy nuqtalar:
equalsvahashCodeshartlarini ta'minlash: Agar ikki ob'ektequals()metodi bilan "teng" deb hisoblanadigan bo'lsa, ularninghashCode()ham bir xil qiymatni qaytarishi kerak. Aks holda, turli ob'ektlar bir xil hash kodiga ega bo'lishi mumkin (kolliziya).- Tez qidirish/qo'shish: Hash kod indeks sifatida ishlatiladi, bu hash kolleksiyalarida elementlarga tez kirishni ta'minlaydi. Buning bo'lmaganda, katta kolleksiyalarda qidiruv ancha sekin bo'lardi.
- Majburiy emas: Agar ob'ekt hash kolleksiyalarida kalit sifatida ishlatilmayotgan bo'lsa, standart
hashCode()(odatda xotira manziliga asoslangan) etarli bo'lishi mumkin. Ammo,equals()ni qayta yozilsa,hashCode()ni ham qayta yozish shart. - Barqarorlik: Nzm ob'ekt uchun
hashCode()qiymati uning hayoti davomida o'zgarmasligi kerak. O'zgaruvchan ob'ektlar uchun hash kod o'zgarishi mumkin, lekin bu ehtiyotkorlik bilan ishlashni talab qiladi.
Kotlin'da asosiy misol:
data class User(val id: Long, val name: String)
// Data class uchun hashCode() va equals() avtomatik ravishda yaratiladi
Java'da qo'lda yozilgan misol (qiymatlarni to'g'ri birlashtirish muhim):
class User {
private final long id;
private final String name;
public User(long id, String name) {
this.id = id;
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return id == user.id &&
Objects.equals(name, user.name); // NullPointerException ni oldini olish uchun Objects.equals ishlatiladi
}
@Override
public int hashCode() {
return Objects.hash(id, name); // Hash kodlarni birlashtirish uchun Objects.hash ishlatiladi
}
}