Sobes.tech
Junior

Ποιοι τύποι συλλογών υπάρχουν στη C#;

sobes.tech AI

Απάντηση από AI

Το C# προσφέρει πολλά είδη συλλογών για αποθήκευση και διαχείριση δεδομένων που βρίσκονται σε διαφορετικά ονόματα χώρου (κυρίως System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). Μπορούν να ταξινομηθούν σύμφωνα με μερικά βασικά χαρακτηριστικά:

  1. Κατά τύπο δεδομένων που αποθηκεύονται:

    • Χωρίς τύπο (Untyped): Αποθηκεύουν αντικείμενα τύπου object (System.Collections). Απαιτούν μετατροπή τύπου και μπορεί να είναι λιγότερο αποδοτικά.
    • Με τύπο (Generic): Αποθηκεύουν αντικείμενα συγκεκριμένου τύπου (System.Collections.Generic). Παρέχουν ασφάλεια τύπου και καλύτερη απόδοση.
  2. Κατά δομή δεδομένων:

    • Λίστες (Lists): Διαδοχικές συλλογές, πρόσβαση σε στοιχεία με δείκτη.
      • ArrayList (χωρίς τύπο)
      • List<T> (με τύπο)
      • LinkedList<T> (με τύπο, διπλά συνδεδεμένη λίστα)
    • Πίνακες (Arrays): Ορισμένου μεγέθους, πρόσβαση με δείκτη.
      • Array (βασική κλάση)
      • T[] (συντακτική ζάχαρη για πίνακες)
    • Λεξικά (Dictionaries): Συλλογές ζευγών κλειδιού-τιμής, πρόσβαση με κλειδί.
      • Hashtable (χωρίς τύπο)
      • Dictionary<TKey, TValue> (με τύπο)
      • SortedList (χωρίς τύπο, ταξινομημένο κατά κλειδί)
      • SortedList<TKey, TValue> (με τύπο, ταξινομημένο κατά κλειδί)
      • SortedDictionary<TKey, TValue> (με τύπο, ταξινομημένο κατά κλειδί, χρησιμοποιεί κόκκινο-μαύρο δέντρο)
    • Σετ (Sets): Συλλογές μοναδικών στοιχείων.
      • HashSet<T> (με τύπο, μη ταξινομημένο)
      • SortedSet<T> (με τύπο, ταξινομημένο)
    • Ουρές (Queues): Συλλογές που λειτουργούν με την αρχή "πρώτος ήλθε, πρώτος εξήλθε" (FIFO).
      • Queue (χωρίς τύπο)
      • Queue<T> (με τύπο)
    • Στοίβες (Stacks): Συλλογές που λειτουργούν με την αρχή "τελευταίος ήλθε, πρώτος εξήλθε" (LIFO).
      • Stack (χωρίς τύπο)
      • Stack<T> (με τύπο)
  3. Κατά ασφάλειας νημάτων:

    • Μη ασφαλείς για νήματα: Τα περισσότερα τυπικά συλλογές (System.Collections, System.Collections.Generic). Απαιτούν εξωτερικό συγχρονισμό για πολυνηματική λειτουργία.
    • Ασφαλείς για νήματα (Concurrent): Σχεδιασμένες για ασφαλή λειτουργία σε πολυνηματικό περιβάλλον χωρίς εξωτερικό μπλοκάρισμα (System.Collections.Concurrent).
      • ConcurrentBag<T>
      • ConcurrentDictionary<TKey, TValue>
      • ConcurrentQueue<T>
      • ConcurrentStack<T>
  4. Κατά μεταβλητότητας:

    • Μεταβλητές (Mutable): Τα περισσότερα συλλογές επιτρέπουν την προσθήκη, διαγραφή και τροποποίηση στοιχείων.
    • Αμετάβλητες (Immutable): Παρέχουν αμετάβλητη μετά τη δημιουργία (System.Collections.Immutable). Κάθε λειτουργία αλλαγής επιστρέφει μια νέα συλλογή.
      • ImmutableArray<T>
      • ImmutableList<T>
      • ImmutableDictionary<TKey, TValue>
      • ImmutableHashSet<T>
      • ImmutableSortedSet<T>
      • ImmutableQueue<T>
      • ImmutableStack<T>

Η επιλογή συγκεκριμένου τύπου συλλογής εξαρτάται από τις απαιτήσεις της εργασίας: τύπος δεδομένων, ανάγκη πρόσβασης με δείκτη ή κλειδί, απαιτήσεις για μοναδικότητα στοιχείων, σειρά αποθήκευσης, απόδοση, ασφάλεια νημάτων και μεταβλητότητα. Στον σύγχρονο C# οι πιο συχνά χρησιμοποιούμενοι τύποι είναι οι τυποποιημένες συλλογές από το χώρο ονομάτων System.Collections.Generic.