Ποιοι τύποι συλλογών υπάρχουν στη C#;
sobes.tech AI
Απάντηση από AI
Το C# προσφέρει πολλά είδη συλλογών για αποθήκευση και διαχείριση δεδομένων που βρίσκονται σε διαφορετικά ονόματα χώρου (κυρίως System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). Μπορούν να ταξινομηθούν σύμφωνα με μερικά βασικά χαρακτηριστικά:
-
Κατά τύπο δεδομένων που αποθηκεύονται:
- Χωρίς τύπο (Untyped): Αποθηκεύουν αντικείμενα τύπου
object(System.Collections). Απαιτούν μετατροπή τύπου και μπορεί να είναι λιγότερο αποδοτικά. - Με τύπο (Generic): Αποθηκεύουν αντικείμενα συγκεκριμένου τύπου (
System.Collections.Generic). Παρέχουν ασφάλεια τύπου και καλύτερη απόδοση.
- Χωρίς τύπο (Untyped): Αποθηκεύουν αντικείμενα τύπου
-
Κατά δομή δεδομένων:
- Λίστες (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>(με τύπο)
- Λίστες (Lists): Διαδοχικές συλλογές, πρόσβαση σε στοιχεία με δείκτη.
-
Κατά ασφάλειας νημάτων:
- Μη ασφαλείς για νήματα: Τα περισσότερα τυπικά συλλογές (
System.Collections,System.Collections.Generic). Απαιτούν εξωτερικό συγχρονισμό για πολυνηματική λειτουργία. - Ασφαλείς για νήματα (Concurrent): Σχεδιασμένες για ασφαλή λειτουργία σε πολυνηματικό περιβάλλον χωρίς εξωτερικό μπλοκάρισμα (
System.Collections.Concurrent).ConcurrentBag<T>ConcurrentDictionary<TKey, TValue>ConcurrentQueue<T>ConcurrentStack<T>
- Μη ασφαλείς για νήματα: Τα περισσότερα τυπικά συλλογές (
-
Κατά μεταβλητότητας:
- Μεταβλητές (Mutable): Τα περισσότερα συλλογές επιτρέπουν την προσθήκη, διαγραφή και τροποποίηση στοιχείων.
- Αμετάβλητες (Immutable): Παρέχουν αμετάβλητη μετά τη δημιουργία (
System.Collections.Immutable). Κάθε λειτουργία αλλαγής επιστρέφει μια νέα συλλογή.ImmutableArray<T>ImmutableList<T>ImmutableDictionary<TKey, TValue>ImmutableHashSet<T>ImmutableSortedSet<T>ImmutableQueue<T>ImmutableStack<T>
Η επιλογή συγκεκριμένου τύπου συλλογής εξαρτάται από τις απαιτήσεις της εργασίας: τύπος δεδομένων, ανάγκη πρόσβασης με δείκτη ή κλειδί, απαιτήσεις για μοναδικότητα στοιχείων, σειρά αποθήκευσης, απόδοση, ασφάλεια νημάτων και μεταβλητότητα. Στον σύγχρονο C# οι πιο συχνά χρησιμοποιούμενοι τύποι είναι οι τυποποιημένες συλλογές από το χώρο ονομάτων System.Collections.Generic.