ΠšΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΡ вопросов ❓ Π½Π° собСсСдовании Π² C# 🍧

ΠžΠ±Π·ΠΎΡ€ вопросов ΠΏΠΎ языка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡŽ C# ΠΈ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ NET


Project maintained by Dvurechensky-Docs Hosted on GitHub Pages — Theme by mattgraham

πŸ“¦ Π§Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ Ρ€Π°Π·Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Π² .NET ΠΈ ΠΊΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΡƒΡŽ Π»ΡƒΡ‡ΡˆΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ?

Typing SVG

Static Badge

✨ ОглавлСниС

⬆ Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΉ


1️⃣ Основная классификация ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΉ

ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Когда ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
List / Array List<T>, T[] Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ доступ, динамичСский (List<T>), фиксированный (array) ЧастыС обращСния ΠΏΠΎ индСксу, нСбольшиС вставки/удалСния
LinkedList LinkedList<T> Π”Π²ΡƒΠ½Π°ΠΏΡ€Π°Π²Π»Π΅Π½Π½Ρ‹ΠΉ список, быстрыС вставки/удалСния Π² сСрСдинС Когда часто Π½ΡƒΠΆΠ½ΠΎ Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ/ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ элСмСнты Π²Π½ΡƒΡ‚Ρ€ΠΈ списка
Stack / Queue Stack<T>, Queue<T> LIFO / FIFO ΠžΡ‡Π΅Ρ€Π΅Π΄ΡŒ ΠΈΠ»ΠΈ стСк ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ
HashSet / Dictionary HashSet<T>, Dictionary<K,V> Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты / ΠΊΠ»ΡŽΡ‡-Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, быстрый поиск Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты, быстрый доступ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ
SortedList / SortedDictionary / SortedSet SortedList<K,V>, SortedDictionary<K,V> ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ Когда Π½ΡƒΠΆΠ΅Π½ доступ ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ с сортировкой
Concurrent ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ConcurrentDictionary, ConcurrentQueue ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½Ρ‹Π΅ ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ прилоТСния
Observable / ReadOnly ObservableCollection<T>, ReadOnlyCollection<T> Для binding UI / Π·Π°Ρ‰ΠΈΡ‚Ρ‹ ΠΎΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ WPF/WinForms MVVM, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ΅Π½ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ доступа

2️⃣ List vs Array

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ Array List
Π Π°Π·ΠΌΠ΅Ρ€ фиксированный динамичСский, увСличиваСтся ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ добавлСния
Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ O(1) O(1)
Вставка/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ Π΄ΠΎΡ€ΠΎΠ³ΠΎ (ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅) Π΄ΠΎΡ€ΠΎΠ³ΠΎ Π² сСрСдинС, быстро Π² ΠΊΠΎΠ½Ρ†Π΅ (Add)
Π’ΠΈΠΏ value/ref value/ref
Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ³Π΄Π° извСстСн Ρ€Π°Π·ΠΌΠ΅Ρ€ Π·Π°Ρ€Π°Π½Π΅Π΅, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ мСняСтся динамичСски, Π½ΡƒΠΆΠ΅Π½ ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ API

3️⃣ LinkedList


4️⃣ Stack / Queue


5️⃣ HashSet / Dictionary\<K,V>


6️⃣ SortedList / SortedDictionary / SortedSet


7️⃣ Concurrent ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ


8️⃣ ObservableCollection / ReadOnlyCollection


9️⃣ ΠŸΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ ΠΈ ΠΊΠ°Π²Π΅Ρ€Π·Π½Ρ‹Π΅ вопросы

  1. **List vs LinkedList**

    • Когда O(1) вставка Π² сСрСдину Ρ€Π΅Π°Π»ΡŒΠ½ΠΎ быстрСС?
    • Когда индСксированиС ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅?
  2. **Array vs List**

    • ΠŸΠΎΡ‡Π΅ΠΌΡƒ массив быстрСС ΠΏΠΎ памяти ΠΈ cache-friendly?
  3. HashSet / Dictionary

    • Π§Ρ‚ΠΎ ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΏΠ»ΠΎΡ…ΠΎΠΉ GetHashCode()?
  4. Concurrent ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

    • КакиС Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы, Ρ‡Π΅ΠΌ ΠΎΡ‚Π»ΠΈΡ‡Π°ΡŽΡ‚ΡΡ ΠΎΡ‚ lock + ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Dictionary?
  5. Sorted vs Unsorted

    • SortedList быстрСС ΠΏΠΎ памяти, ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ вставка?
    • SortedDictionary vs SortedList: trade-offs
  6. Boxing / unboxing

    • ArrayList устарСл β†’ boxing value types
  7. CopyOnWrite

    • ReadOnlyCollection ΠΈΠ»ΠΈ ToArray β†’ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠ°ΠΊΠΈΠ΅ ΠΏΠΎΠ΄Π²ΠΎΠ΄Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹?

πŸ”Ÿ ΠŸΡ€ΠΈΠΌΠ΅Ρ€ Π²Ρ‹Π±ΠΎΡ€Π° ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ

Π‘Ρ†Π΅Π½Π°Ρ€ΠΈΠΉ Π›ΡƒΡ‡ΡˆΠ°Ρ коллСкция ΠŸΠΎΡ‡Π΅ΠΌΡƒ
Частый доступ ΠΏΠΎ индСксу List<T> / T[] O(1)
ЧастыС вставки/удалСния Π² сСрСдинС LinkedList<T> O(1) вставка/ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅
Π£Π½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ элСмСнты HashSet<T> Быстрый поиск ΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ
ΠšΠ»ΡŽΡ‡ β†’ Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Dictionary<K,V> O(1) поиск ΠΏΠΎ ΠΊΠ»ΡŽΡ‡Ρƒ
ΠžΡ‚ΡΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ элСмСнты SortedList / SortedDictionary АвтоматичСская сортировка
ΠœΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹Π΅ добавлСния/удалСния ConcurrentDictionary / ConcurrentQueue ΠŸΠΎΡ‚ΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ
UI привязка ObservableCollection<T> Бобытия ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ

⬆ Π’Π΅Ρ€Π½ΡƒΡ‚ΡŒΡΡ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΉ

✨Dvurechensky✨