ΠΠ±Π·ΠΎΡ Π²ΠΎΠΏΡΠΎΡΠΎΠ² ΠΏΠΎ ΡΠ·ΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈΠΈΡΠΎΠ²Π°Π½ΠΈΡ C# ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ NET
β¬ ΠΠ΅ΡΠ½ΡΡΡΡΡ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΉ
ΠΠ°ΡΠ΅Π³ΠΎΡΠΈΡ | ΠΡΠΈΠΌΠ΅ΡΡ | ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ | ΠΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ |
---|---|---|---|
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, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π΄ΠΎΡΡΡΠΏΠ° |
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡ | Array | List |
---|---|---|
Π Π°Π·ΠΌΠ΅Ρ | ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ | Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠΉ, ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΠΎ ΠΌΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ |
ΠΠ½Π΄Π΅ΠΊΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ | O(1) | O(1) |
ΠΡΡΠ°Π²ΠΊΠ°/ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ | Π΄ΠΎΡΠΎΠ³ΠΎ (ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅) | Π΄ΠΎΡΠΎΠ³ΠΎ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅, Π±ΡΡΡΡΠΎ Π² ΠΊΠΎΠ½ΡΠ΅ (Add ) |
Π’ΠΈΠΏ | value/ref | value/ref |
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ³Π΄Π° | ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°ΡΠ°Π½Π΅Π΅, Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΌΠ΅Π½ΡΡΡ | ΡΠ°Π·ΠΌΠ΅Ρ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈ, Π½ΡΠΆΠ΅Π½ ΡΠ΄ΠΎΠ±Π½ΡΠΉ API |
Prev
/Next
).**Stack
Push
, Pop
, Peek
**Queue
Enqueue
, Dequeue
, Peek
ΠΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ:
**HashSet
Add
, Remove
, Contains
Dictionary<K,V>
Add
, TryGetValue
, ContainsKey
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ:
GetHashCode()
Π΄ΠΎΠ»ΠΆΠ½Π° Π±ΡΡΡ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠΉ!SortedList<K,V>
SortedDictionary<K,V>
**SortedSet
ΠΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠ΅:
ConcurrentDictionary<K,V>
ConcurrentQueue<T>
ConcurrentStack<T>
ConcurrentBag<T>
**ObservableCollection
CollectionChanged
**ReadOnlyCollection
**List
**Array vs List
HashSet / Dictionary
GetHashCode()
?Concurrent ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΈ
Sorted vs Unsorted
Boxing / unboxing
ArrayList
ΡΡΡΠ°ΡΠ΅Π» β boxing value typesCopyOnWrite
Π‘ΡΠ΅Π½Π°ΡΠΈΠΉ | ΠΡΡΡΠ°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ | ΠΠΎΡΠ΅ΠΌΡ |
---|---|---|
Π§Π°ΡΡΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΡ | List<T> / T[] |
O(1) |
Π§Π°ΡΡΡΠ΅ Π²ΡΡΠ°Π²ΠΊΠΈ/ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π² ΡΠ΅ΡΠ΅Π΄ΠΈΠ½Π΅ | LinkedList<T> |
O(1) Π²ΡΡΠ°Π²ΠΊΠ°/ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ |
Π£Π½ΠΈΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ | HashSet<T> |
ΠΡΡΡΡΡΠΉ ΠΏΠΎΠΈΡΠΊ ΠΈ ΡΠ½ΠΈΠΊΠ°Π»ΡΠ½ΠΎΡΡΡ |
ΠΠ»ΡΡ β ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ | Dictionary<K,V> |
O(1) ΠΏΠΎΠΈΡΠΊ ΠΏΠΎ ΠΊΠ»ΡΡΡ |
ΠΡΡΠΎΡΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ | SortedList / SortedDictionary |
ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠ°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° |
ΠΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ/ΡΠ΄Π°Π»Π΅Π½ΠΈΡ | ConcurrentDictionary / ConcurrentQueue |
ΠΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ |
UI ΠΏΡΠΈΠ²ΡΠ·ΠΊΠ° | ObservableCollection<T> |
Π‘ΠΎΠ±ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ |
β¬ ΠΠ΅ΡΠ½ΡΡΡΡΡ ΠΊ Π³Π»Π°Π²Π½ΠΎΠΉ
β¨Dvurechenskyβ¨