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 IDEA، استفاده از ابزارهای تولید خودکار کد میتواند به پیادهسازی سریعتر متدهای equals و hashCode کمک کند. این متدها برای عملکرد درست کالکشنهایی مانند HashSet و HashMap حیاتی هستند.
- Standardization Note
یکی از بزرگترین مزایای JCF این است که یک زبان مشترک بین برنامهنویسان ایجاد میکند. وقتی از یک List در متد خود استفاده میکنید، هر برنامهنویس دیگری در هر جای دنیا دقیقاً میداند که چگونه باید با آن کار کند.
- Performance Tip
برای عملیات جستجوی سریع، HashSet و HashMap به دلیل استفاده از مکانیزم هشینگ یا Hashing عملکرد بسیار بهتری نسبت به لیستها دارند.
- Legacy Classes
کلاسهایی مانند Vector و Hashtable کلاسهای قدیمی یا Legacy هستند که امروزه کمتر استفاده میشوند و معمولاً جایگزینهای بهینهتری در فریمورک کالکشن برای آنها وجود دارد.
