Sobes.tech
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 και ==.