مجموعه ها و ساختارهای داده در .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/