امکان ذخیره سازی، جستجو و گردش (Iterate) در مجموعه ای از آبجکت ها را فراهم می کنند.
ArrayList یک کلاس ساده است که یک UnOrderedCountainer برای آبجکت هایی از تایپ های مختلف است.
طول ArrayList داینامیک است و هر زمان که آبجکتی به آن اضافه می شود طول آن نیز افزایش می یابد.
ArrayList برای اضافه کردن از دو متد Add و AddRange استفاده می کند. در AddRange محتویات یک آرایه و یا Collection به ArrayList اضافه می شود. یعنی در حقیقت AddRange یک Range از آبجکتی که از ICollection مشتق شده باشد را به Array:List اضافه می کند. Add و AddRange آبجکت های جدید را به انتهای Collection اضافه می کنند. البته می توان آبجکت ها را به Index خاصی از Collection نیز اضافه کرد که در این صورت از Insert و InsertRange استفاده می شود. برای insert کردن آبجکت در مکان خاصی از Collection می توان از Indexer نیز استفاده کرد. به صورت coll[3]=”Hey All” که در این صورت این خانه Overwrite می شود.
ValueType ها هم می توانند در Collection ها ذخیره شوند اما در ابتدا باید به Objetc Reference ها تبدیل شوند.
برای Remove کردن آبجکت از Collection از متدهای Remove، RemoveAt و RemoveRange استفاده می شود.
متد Remove یک آبجکت مشخصی را از Collection حذف می کند. اگر هم این آبجکت در Collection وجود نداشته باشد، این متد بدون اینکه Exception ای بدهد پایان می یابد.
متد RemoveAt برای حذف آبجکت از مکان خاصی از Collection استفاده می شود.
متد Clear برای خالی کردن همه آیتم های Collection است.
IndexOf برای مشخص کردن Index یک آیتم خاص در Collection است. اگر هم این آیتم در Collection مورد نظر وجود نداشته باشد، از روی مقداری که این متد برمی گرداند مشخص می گردد.
Contain برای این است که مشخص کند یک آبجکت خاص در Collection هست یا نیست.
ArrayList از IEnuerable نیز مشتق شده است که شامل Property به نام Current و متدهای MoveNext و Reset می باشد.
Peroperty به نام Current در IEnumerable آبجکت جاری Collection موردنظر را برمی گرداند.
مثالی از نحوه استفاده از IEnumerator در زیر آورده شده است:
IEnumerator enumerator = coll.GetEnumerator
While (enumeratoe.MoveNext())
{
Console.WriteLine(enumerator.Current)
}
هر Collection ای که از ICollection مشتق شده باشد، IEnumerable را نیز پشتیبانی می کنند.
هر کلاسی که IList را پشتیبانی کند، ICollection و IEnumerable را نیز پشتیبانی می کند.
Dictionary نوعی Collection است که داده هایش به صورت key,value)) ذخیره شده اند و امکان جستجو با Key را دارد. کلاس HashTable برای انجام map کردن این key و value ها به یکدیگر استفاده می شود. در مثال زیر برای map کردن نام و ایمیل افراد از HashTable استفاده می شود:
Hashtable emailLookup = new Hashtable();
emailLookup.Add(“fariba@yahoo.com”,”fariba”)
هر آبجکت در دات نت از کلاس Object مشتق شده است که این کلاس نیز از متد GetHashCode پشتیبانی می کند که این متد برای شناسایی این آبجکت یک Integre را به صورت Unique برمی گرداند.
کلاس String هم متد GetHashCode را برای خودش Override کرده است و بنابراین برای هر String هم کد Hash داریم. اگر دو String دارای Text یکسان باشند بدیهی است که کد Hash آنها نیز یکسان خواهد بود.
در کلاس آبجکت متد GetHashCode اینطور پیاده سازی شده است که برای هر Instance از یک آبجکت یک کد Hash تولید می شود. یعنی حتی اگر این دو Instance با هم مساوی باشند، باز هم این مساوی بودن برای متد GetHashCode مشخص نمی شود و این متد برای هر کدام کد Hash متفاوت تولید می کند.
SortedList Class یک Dictionary Class است و به ایتم های ذخیره شده در آن می توان به صورت Sort شده دسترسی داشت و این Sort شدن را در همان زمانی که آیتم ها Add می شوند، انجام می دهد.
با استفاده از DescendingComparer می توان لیست Sort شده ی معکوس داشت که طریقه ایجاد آن در زیر آورده شده است:
SortedList sort = new SortedList(new DescendingComparer())
Dictionary های استاندارد SortedList و HashTable می باشند. علاوه بر این دو نوع Doictionary دات نت فریم ورک از Dictionary های دیگری هم پشتیبانی می کند که عبارتند از: ListDictionary، HybridDictionary و OrderdDictionary
کلاس Hashtable در حالت عمومی کارایی دارد اما وقتی تعداد آیتم ها کمتر از 10 تا باشد این کلاس Overhead دارد که باعث کم شدن Performance می شود به همین دلیل دات نت فریم ورک ListDictionary را معرفی کرده است.
اگر Dictionary مورد نظر ما بزرگ باشد از Hashtable استفاده می کنیم و اگر کوچک باشد از ListDictionary استفاده می کنیم.
اگر اطلاعی از طول Dictionary مورد نظر نداشته باشید باید از HybridDictionary استفاده کنید زیرا این Dictionary مانند ListDictionary پیاده سازی می شود و اگر طول Dictionary مورد نظر شما بزرگ شد این Dictionary به Hashtable تبدیل می شود.
این دو مورد در Hashtable صدق می کند:
اگر یک Dictionary بخواهبد که کاربردش مانند Hashtable باشد و Sort شده هم باشد از OrderdDictionary استفاده کنید.