تفاوت Dictionary با hashtable

abasfar

Member
باعرض سلام وعید مبارک:rose:
میخواستم بدون فرق این دوتاDictionary با hashtableچیه
هردوتاشون کلید و مقدار میگیرن و با اون کلید مقدار برمیگردونند:green:
 

the_king

مدیرکل انجمن
باعرض سلام وعید مبارک:rose:
میخواستم بدون فرق این دوتاDictionary با hashtableچیه
هردوتاشون کلید و مقدار میگیرن و با اون کلید مقدار برمیگردونند:green:

در ظاهر خیلی شبیه هم اند چون هر دو شون از ساختار IDictionary استفاده می کنند اما در باطن
یک تفاوت بزرگ دارند، اونم اینه که Dictionary از نوع Generic است اما Hashtable از نوع Generic نیست،
یعنی نوع داده ای که در Dictionary ذخیره میشه از قبل مشخص میشه و تغییر نمی کنه (مثلا <int , string >
در حالی که Hashtable هم Key و هم Value رو بصورت Object ذخیره می کنه که هر چیزی می تونه باشه.
فرضا در Hashtable می توانید همزمان یک Key از نوع string و یک Key از نوع int داشته باشید.

همین مساله باعث میشه که Hashtable برای تبدیل کردن میان Object و نوع داده اصلی مدام در حال
Boxing / Unboxing باشه و در نتیجه کلا Hashtable کند تر از یک Dictionary عمل کنه. به برنامه نویسان
توصیه میشه که اگه نوع داده های Generic رو بکار می برند از Dictionary استفاده کنند که سرعت اش
خیلی بیشتر از Hashtable است.

Hashtable یکسری استفاده های خاص داره و برای همین خیلی کم ازش استفاده میشه، مواردی که
نوع داده Key یا Value مشخص نیست و ممکنه هر آیتمی نوع داده متفاوتی رو بکار ببره.
 

the_king

مدیرکل انجمن
میشه Boxing / Unboxing را یکمی توضیح بدیممنون میشم

انواع داده های Generic ساختار مشخص و ثابتی دارند، مثلا ساختار یک داده از نوع int یا string کاملا مشخص است
و فقط هم داده ای از همان نوع را ذخیره می کنند.

اما Object باید بتواند هر نوع داده ای را در خود جای دهد بنابر این به یک ساختار داده ای انعطاف پذیر احتیاج دارد
که هم خود داده را نگهداری کند و هم نوع اصلی داده (مثلا int یا string) مشخص و همراه داده ذخیره شود.
شبیه به یک جعبه که روی جعبه نوع داده نوشته شود و داخل جعبه خود داده قرار بگیرد.

ظاهرا همه Object ها یک جعبه هستند که نوع داده واقعی رویش نوشته شده اما ساختار داده داخل جعبه مطابق
با نوع داده فرق می کند.

به فرایندی که یک داده با هر نوع داده دلخواهی را بصورت یک جعبه Object در میاورد Boxing و به فرایندی که
داده را از داخل جعبه Object خارج می کند و به نوع داده اصلی بر می گرداند Unboxing می گویند. هر زمانی که
بخواهید یک داده را در داخل یک متغیر از نوع Object ذخیره کنید عمل Boxing انجام می شود.
هر زمانی هم که بخواهید داده اصلی را از داخل متغیری از نوع Object خارج کنید عمل Unboxing انجام می شود.
به همین علت است که عملیات هایی که روی نوع داده Object انجام می شوند کند تر از مشابه Generic شان اند.
 

جدیدترین ارسال ها

بالا