مشاهده نسخه کامل
: تفاوت List با Array با ArrayList
با سلام و درود و تبریک سال نودوستان میشه یک مثال و توضیح در مورد تفاوت این سه ساختمان داده List با Array با ArrayList در سی شارپ داشته باشیم؟ سرچ زدم اما این سه تا رو دقیقا با هم قیاس نکردند تا بفهمیم خوب.
البته یک چیزهایی فهمیدم اینکه Array سایزشون ثابت هست. اینکه جنریک نیستند و فقط یک Type میشه بهش داد و گرفت ازش.
ممنون
سلام
از این فرصت استفاده میکنم و نوروز را به تمام دوستان در این سایت تبریک عرض میکنم. :n16:
آرایه ها داده های پایه ای ذخیره انبوه و پشت سر هم اطلاعات در RAM هستند.
هر دو ساختار List و ArrayList در داخل خود برای ذخیره سازی از Array استفاده میکنند.
پس مشخص است که سرعت و بازدهی کار کردن با Array بیشتر از ساختارهای مشابه ای مانند List و ArrayList است.
اما نکته منفی آرایه ها وجود شرط "طول ثابت و مشخص" شان است.
در زمان نمونه سازی (New) باید طول را بدهید و دیگر هم نمی توانید تغییرش دهید.
وجود همین یک شرط باعث میشود، استفاده مستقیم آنها برای اغلب بخش ها سخت باشد.
مانند نگهداری اطلاعات دانش آموزان یا کتاب ها یا کارمندان و... و... چون در عمل هیچکدام طول ثابت و مشخص ندارند.
و لزوم کدنویسی جهت ساخت کلاس هایی مانند List و ArrayList مطرح میشود تا طول بتواند متغییر باشد.
این کلاس ها ابتدا یک آرایه کوچک را نمونه سازی (New) میکنند و شروع به پر کردن آن میکنند و هر زمان پر شد، آرایه بزرگتری می سازند و کل عناصر آرایه قدیم را در آرایه جدید کپی میکنند و آرایه قدیم را دور ریخته و از آرایه بزرگتر جدید استفاده میکنند.
مثلا:
خودشان خودکار در ابتدا آرایه 10 عنصری می سازند...
این 10 میشود capacity فهرست که با count تفاوت دارد.
با هر Add کردن مقدار count افزایش می یابد و خانه های آرایه یکی پس از دیگری پرشده و استفاده میشوند.
تا وقتی که count به capacity برسد و آرایه مرکزی پر شود.
مثلا در مثال ، ما بخواهیم 11 امین عنصر را Add کنیم.
اینجاست که کلاس مذکور یک آرایه جدید 20 عنصری را New میکند و تمام عناصر قبلی را از آرایه قبلی در جدید کپی کرده و آرایه قبلی را دور میریزد.
(در واقع capacity را افزایش میدهد)
مجدد روز از نو و روزی از نو !
شروع به پرکردن خانه های آرایه 20 عنصری میکند...
*** به عنوان یک تمرین بسیار خوب برنامه نویسی، خودتان هم میتوانید یک List یا ArrayList بنویسید ***
اما تفاوت List و ArrayList ...
ArrayList جنریکی نیست و همواره آرایه object ای می ساز و object میگیرد و میدهد، هر چیزی درونش جا میشود ولی نمیتوانید نوع را مشخص کنید (برای struct ها هم باید هزینه boxing و unboxing را بپردازید)
ولی
List جنریکی است و اجازه میدهد که شما بگویید آرایه مرکزی اش را از چه نوعی بسازد و چه نوعی را بگیرد و تحویل دهد.
در واقع ArrayList در عمل همان <List<object است و در عمل بجای هم قابل استفاده هستند.
درکل بدلیل جنریکی بودن، کلاس List منعطف تر است و باعث خطای برنامه نویسی کمتری میشود و حتی کمی سریعتر است.
موفق باشید.
vBulletin , Copyright ©2000-2025, Jelsoft Enterprises Ltd.