Junior — Middle
Ποιοι τύποι κλειδιών δεδομένων επιτρέπονται για χρήση σε έναν πίνακα κατακερματισμού;
sobes.tech AI
Απάντηση από AI
Στους πίνακες κατακερματισμού (π.χ., σε Dart που χρησιμοποιείται στο Flutter), τα κλειδιά μπορούν να είναι αντικείμενα οποιουδήποτε τύπου, υπό την προϋπόθεση ότι υλοποιούν σωστά τις μεθόδους hashCode και ==. Αυτό είναι απαραίτητο για τον σωστό υπολογισμό της τιμής κατακερματισμού και τη σύγκριση των κλειδιών.
Τυπικά, χρησιμοποιούνται πρωταρχικοί τύποι, όπως συμβολοσειρές (String), αριθμοί (int), αλλά μπορούν επίσης να χρησιμοποιηθούν προσαρμοσμένες κλάσεις αν υπερκαλύπτονται αυτές οι μέθοδοι. Για παράδειγμα:
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] = 'Προγραμματιστής';
print(map[p]); // Προγραμματιστής
}
Επομένως, τα κλειδιά πρέπει να είναι αμετάβλητα και να έχουν σωστά υλοποιημένες τις μεθόδους hashCode και ==.