Junior — Middle
Hash jadvalida foydalanish uchun qanday kalit ma'lumotlar turlari ruxsat etilgan?
sobes.tech AI
AIdan javob
Hash jadvalarida (masalan, Flutterda ishlatiladigan Dartda) kalitlar har qanday turdagi obyektlar bo'lishi mumkin, shart shuki, ular hashCode va == metodlarini to'g'ri amalga oshirgan bo'lsinlar. Bu to'g'ri hash qiymatini hisoblash va kalitlarni solishtirish uchun zarur.
Odatda, primitiv turlar, masalan, satrlar (String), raqamlar (int) ishlatiladi, lekin bu metodlar qayta yozilgan bo'lsa, maxsus sinflar ham ishlatilishi mumkin. Masalan:
class Person {
final String name;
final int id;
Person(this.name, this.id);
@override
bool operator ==(Object other) =>
identical(this, other) ||
other is Person && runtimeType == other.runtimeType && id == other.id;
@override
int get hashCode => id.hashCode;
}
void main() {
var map = <Person, String>{};
var p = Person('Alice', 1);
map[p] = 'Dasturchi';
print(map[p]); // Dasturchi
}
Shuning uchun, kalitlar o'zgarmas bo'lishi va hashCode hamda == metodlari to'g'ri amalga oshirilgan bo'lishi kerak.