Collection Intro
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
-
Java Collection Framework (JCF) یک چارچوب (Framework) شامل مجموعهای از
Interfaceها وClassهای آماده است که ساختارهای دادهای استانداردی را برای ذخیره و مدیریت بهینه گروهی از اشیا (Objects) در اختیار برنامهنویس قرار میدهد. -
Interface List اینترفیسی که اجازه ذخیره دادهها با رعایت ترتیب ورود (
Ordered) را میدهد و همچنین اجازه میدهد دادههای تکراری (Duplicate) در آن ذخیره شوند. -
Interface Set ساختاری که فقط مقادیر منحصربهفرد (
Unique) را در خود نگه میدارد و اجازه ورود دادههای تکراری را نمیدهد. برخی از پیادهسازیهای آن ترتیبی برای ذخیرهسازی تضمین نمیکنند. -
Interface Map ساختاری که دادهها را به صورت جفتهای «کلید-مقدار» (
Key-Value Pair) ذخیره میکند. در این ساختار، کلیدها باید منحصربهفرد باشند و هر کلید به یک مقدار خاص اشاره میکند. -
Interface Queue & Deque ساختارهای مربوط به صف که معمولاً بر اساس منطق
FIFO(اولین ورودی، اولین خروجی) کار میکنند.Dequeنسخه پیشرفتهتری است که اجازه ورود و خروج داده از هر دو سمت (اول و آخر صف) را میدهد. -
Dynamic Resizing قابلیتی در کالکشنها که برخلاف آرایههای معمولی (که
Fixed Sizeهستند)، اجازه میدهد تا با اضافه شدن دادههای جدید، فضای حافظه به صورت خودکار افزایش یابد. -
Utility Class کلاسهایی مانند
Collectionsکه شامل متدهایStaticآماده برای انجام عملیاتهای رایج مانند جستجو (Search) و مرتبسازی (Sort) روی کالکشنها هستند.
موارد مصاحبه ای
-
تفاوت اصلی بین Array و Collection Framework چیست؟ آرایهها دارای اندازه ثابت (
Fixed Size) هستند و پس از تعریف نمیتوان سایز آنها را تغییر داد، اما کالکشنها به صورت پویا (Dynamic) با توجه به حجم دادهها تغییر سایز میدهند. -
چه زمانی از Set به جای List استفاده میکنیم؟ زمانی که هدف ما جلوگیری از ذخیره دادههای تکراری باشد و بخواهیم مطمئن شویم تمام عناصر موجود در مجموعه منحصربهفرد (
Unique) هستند. -
تفاوت ArrayList و Vector در چیست؟ هر دو رفتار مشابهی دارند، اما متدهای کلاس
Vectorبه صورتSynchronizedطراحی شدهاند که باعث میشودThread-safeباشد، در حالی کهArrayListبرای محیطهای تکرشتهای به دلیل سرعت بالاتر ترجیح داده میشود. -
ساختار داده TreeMap چه ویژگی خاصی دارد؟ این ساختار داده به صورت خودکار کلیدها را بر اساس نظم طبیعی آنها (مثلاً حروف الفبا یا اعداد) مرتب (
Sorted) نگه میدارد. -
نقش اینترفیس Iterator چیست؟ این اینترفیس ابزاری استاندارد برای پیمایش (
Iteration) در میان عناصر یک کالکشن فراهم میکند بدون اینکه نیاز باشد برنامهنویس درگیر جزئیات پیادهسازی آن ساختار داده شود.
سناریو کاربردی
در برنامهنویسی سنتی، اگر نیاز به یک آرایه با طول متغیر داشتیم، باید به صورت دستی کدی مینوشتیم که وقتی ظرفیت آرایه پر میشد، یک آرایه بزرگتر ایجاد کرده و تمام عناصر قبلی را به آن منتقل کند. این کار نه تنها زمانبر است، بلکه احتمال خطا در مدیریت حافظه را بالا میبرد.
با استفاده از Java Collection Framework و کلاسی مانند ArrayList دیگر نیازی به نوشتن این الگوریتمهای تکراری نیست. شما صرفاً از متد add استفاده میکنید و جاوا در پشت صحنه تمامی عملیات تغییر سایز (Resizing) و مدیریت حافظه را به صورت بهینه انجام میدهد. این موضوع باعث افزایش سرعت توسعه (Development Speed) و بازمصرفی کد (Code Reusability) میشود.
بیشتر بدانید
-
IDE Tip در اکثر محیطهای توسعه مانند IntelliJ، استفاده از ابزارهای تولید خودکار کد میتواند به شما در پیادهسازی سریعتر متدهای
equalsوhashCodeکه برای عملکرد درست کالکشنهایی مثلHashSetوHashMapحیاتی هستند، کمک کند. -
Standardization Note یکی از بزرگترین مزایای JCF این است که یک زبان مشترک بین برنامهنویسان ایجاد میکند؛ به طوری که وقتی از یک
Listدر متد خود استفاده میکنید، هر برنامهنویس دیگری در هر جای دنیا دقیقاً میداند که چگونه باید با آن کار کند. -
Performance Tip برای عملیاتهای جستجوی سریع،
HashSetوHashMapبه دلیل استفاده از مکانیزم هشینگ (Hashing) عملکرد بسیار بهتری نسبت به لیستها دارند. -
Legacy Classes کلاسهایی مانند
VectorوHashtableکلاسهای قدیمی (Legacy) هستند که امروزه کمتر استفاده میشوند و معمولاً جایگزینهای بهینهتری در فریمورک کالکشن برای آنها وجود دارد.
