Junior
Kokie kolekcijų tipai yra C#?
sobes.tech AI
Atsakymas iš AI
C# siūlo daugybę kolekcijų tipų duomenų saugojimui ir valdymui, kurie yra išdėstyti skirtinguose vardų erdvėse (pagrinde System.Collections, System.Collections.Generic, System.Collections.Concurrent, System.Collections.Immutable). Juos galima klasifikuoti pagal keletą pagrindinių požymių:
-
Pagal saugomų duomenų tipą:
- Be tipo (Untyped): Saugo objektus
objecttipo (System.Collections). Reikalauja tipų konvertavimo ir gali būti mažiau efektyvūs. - Tipizuoti (Generic): Saugo tam tikro tipo objektus (
System.Collections.Generic). Užtikrina tipų saugumą ir geresnį našumą.
- Be tipo (Untyped): Saugo objektus
-
Pagal duomenų struktūrą:
- Sąrašai (Lists): Sekos kolekcijos, prieiga prie elementų pagal indeksą.
ArrayList(be tipo)List<T>(tipizuotas)LinkedList<T>(tipizuotas dvipusis sąrašas)
- Masivai (Arrays): Fiksuoto dydžio, prieiga pagal indeksą.
Array(bazinė klasė)T[](sintaksinis cukrus masyvams)
- Žodynai (Dictionaries): Rinkiniai porų raktas-reikšmė, prieiga per raktą.
Hashtable(be tipo)Dictionary<TKey, TValue>(tipizuotas)SortedList(be tipo, surūšiuotas pagal raktą)SortedList<TKey, TValue>(tipizuotas, surūšiuotas pagal raktą)SortedDictionary<TKey, TValue>(tipizuotas, surūšiuotas pagal raktą, naudoja raudonai-juodą medį)
- Rinkiniai (Sets): Unikalūs elementų rinkiniai.
HashSet<T>(tipizuotas, nesurūšiuotas)SortedSet<T>(tipizuotas, surūšiuotas)
- Eilės (Queues): Kolekcijos, veikiančios pagal "pirmas atėjo, pirmas išeina" (FIFO).
Queue(be tipo)Queue<T>(tipizuotas)
- Stakos (Stacks): Kolekcijos, veikiančios pagal "paskutinis atėjo, pirmas išeina" (LIFO).
Stack(be tipo)Stack<T>(tipizuotas)
- Sąrašai (Lists): Sekos kolekcijos, prieiga prie elementų pagal indeksą.
-
Srauto saugumo požiūriu:
- Ne-saugios (Non-thread-safe): Dauguma standartinių kolekcijų (
System.Collections,System.Collections.Generic). Reikalauja išorinės sinchronizacijos daugiasrautei veiklai. - Saugios (Concurrent): Sukurtos saugiai veikti daugiasraute be išorinės blokavimo (
System.Collections.Concurrent).ConcurrentBag<T>ConcurrentDictionary<TKey, TValue>ConcurrentQueue<T>ConcurrentStack<T>
- Ne-saugios (Non-thread-safe): Dauguma standartinių kolekcijų (
-
Keičiamumo požiūriu:
- Keičiamas (Mutable): Dauguma kolekcijų leidžia pridėti, ištrinti ir keisti elementus.
- Ne keičiamas (Immutable): Užtikrina nekeitčiamumą po sukūrimo (
System.Collections.Immutable). Bet kokia keitimo operacija grąžina naują kolekciją.ImmutableArray<T>ImmutableList<T>ImmutableDictionary<TKey, TValue>ImmutableHashSet<T>ImmutableSortedSet<T>ImmutableQueue<T>ImmutableStack<T>
Konkretus kolekcijos tipo pasirinkimas priklauso nuo užduoties reikalavimų: duomenų tipas, poreikis prieiti per indeksą ar raktą, elementų unikalumo reikalavimai, saugojimo tvarka, našumas, srauto saugumas ir keičiamumas. Moderniame C# dažniausiai naudojamos tipizuotos kolekcijos iš System.Collections.Generic erdvės.