Kolekce a pole, zásobník, fronta, slovník
Formát: 30 min praktická úloha, 15 min obhajoba + teorie. Teorie pokrývá pole, generické kolekce a hash-based struktury. Praktika: implementovat vlastní Stack a Queue pomocí Listu, plus třída se slovníkem.
Kolekce je abstraktní datový typ pro ukládání a správu skupiny objektů. Na rozdíl od jednotlivých proměnných umožňují pracovat s víc prvky najednou.
Proč potřebujeme kolekce, když máme pole:
| Pole (Array) | Kolekce (List, Stack, atd.) |
|---|---|
| Pevná velikost | Dynamická velikost |
| Manuální resize (znovu alokovat) | Auto-resize, vestavěné metody |
| Jen index-based přístup | Různé přístupové vzory (FIFO, LIFO, by key) |
| Žádné vestavěné metody | Add, Remove, Contains, Sort... |
V C# se rozdělují na:
ArrayList, Hashtable): legacy, dnes se nepoužívajíList<T>, Stack<T>, Queue<T>, Dictionary<K,V>): standardní volbaConcurrentDictionary atd.): thread-safe pro paralelní kódSortedDictionary, LinkedList<T>): speciální chováníPro maturitu se zaměříme na generické. Negenerické jsou přežitek z .NET 1.x (před generikami v roce 2005) a dnes je nepoužívej, jsou pomalejší a méně bezpečné.
Pole je primitivní kolekce s pevnou velikostí, kde prvky leží bezprostředně za sebou v paměti (souvislý blok).
int[] cisla = new int[5]; // pole o velikosti 5
cisla[0] = 10;
cisla[1] = 20;
int[] inicializovane = { 1, 2, 3, 4, 5 };
Console.WriteLine(cisla[0]); // přístup přes index
Console.WriteLine(cisla.Length); // 5
| Vlastnost | Hodnota |
|---|---|
| Velikost | Pevná, určí se při vytvoření |
| Přístup přes index | O(1), díky kontinuální paměti |
| Insert/Delete uprostřed | O(n), nutné posunout prvky |
| Resize | Nelze přímo, musíš alokovat nové pole a kopírovat |
| Typ prvků | Stejný (homogenní) |