مجموعه ها و ساختارهای داده در .net
داده های هم شکل و مشابه، در زمان ویرایش یا ذخیره سازی، با کارایی بیشتری قالب مدیریت هستند.
در زبان .net و دیگر زبان های برنامه نویسی، کالکشن یا مجموعه های مختلفی برای مدیریت داده های هم شکل وجود دارد.
ساختار های داده به دو صورت کلی Generic و Non-Generic وجود دارند. مورد اول بر خلاف مورد دوم Type-Safe میباشد، پس عملکرد بهتری دارد.
نوشته شود
| دلیل | نوع Generic | نوع Non-Generic | نوع Thread-safe |
|---|---|---|---|
| ذخیره بصورت key/value با قابلیت جستجو سریع بر اساس کلید | Dictionary | Hashtable | ConcurrentDictionary ReadOnlyDictionary ImmutableDictionary |
| دسترسی بر اساس index | List | Array ArrayList |
ImmutableList ImmutableArray |
| استفاده بصورت FIFO | Queue | Queue | ConcurrentQueue ImmutableQueue |
| استفاده بصورت LIFO | Stack | Stack | ConcurrentStack ImmutableStack |
| دسترسی به ترتیب به آیتم ها | LinkedList | پیشنهاد نمی شود | پیشنهاد نمی شود |
| دریافت نوتیفیکیشن در زمان افزودن و حذف | ObservableCollection | پیشنهاد نمی شود | پیشنهاد نمی شود |
| داده های مرتب شده | SortedList | SortedList | ImmutableSortedDictionary ImmutableSortedSet |
| مجموعه ای بر اساس توابع ریاضی | HashSet SortedSet |
پیشنهاد نمی شود | ImmutableHashSet ImmutableSortedSet |
پیچیدگی زمانی
| متغیر | هزینه استهلاک | بدترین زمان | غیرقابل تغییر | پیچیدگی زمانی |
|---|---|---|---|---|
Stack<T>.Push |
O(1) | O(n) |
ImmutableStack<T>.Push |
O(1) |
Queue<T>.Enqueue |
O(1) | O(n) |
ImmutableQueue<T>.Enqueue |
O(1) |
List<T>.Add |
O(1) | O(n) |
ImmutableList<T>.Add |
O(log n) |
List<T>.Item[Int32] |
O(1) | O(1) | ImmutableList<T>.Item[Int32] |
O(log n) |
List<T>.Enumerator |
O(n) |
O(n) |
ImmutableList<T>.Enumerator |
O(n) |
HashSet<T>.Add, lookup |
O(1) | O(n) |
ImmutableHashSet<T>.Add |
O(log n) |
SortedSet<T>.Add |
O(log n) |
O(n) |
ImmutableSortedSet<T>.Add |
O(log n) |
Dictionary<T>.Add |
O(1) | O(n) |
ImmutableDictionary<T>.Add |
O(log n) |
Dictionary<T> lookup |
O(1) | O(1) – or strictly O(n) |
ImmutableDictionary<T> lookup |
O(log n) |
SortedDictionary<T>.Add |
O(log n) |
O(n log n) |
ImmutableSortedDictionary<T>.Add |
O(log n) |
مبنع:
https://docs.microsoft.com/en-us/dotnet/standard/collections/