Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

Create Dynamic Array | ساخت آرایه پویا

📖توضیحات درس

🎥 این ویدیو قسمت بیست و پنجم از بوت‌کمپ رایگان جاواست. 🧱 ساخت آرایه پویا در جاوا – پروژه محور 📝 در این قسمت به یکی از مسائل کاربردی و مهم در برنامه‌نویسی می‌پردازیم: ساخت یک آرایه پویا (Dynamic Array) که به‌صورت خودکار وقتی ظرفیتش پر شد، اندازه‌اش افزایش پیدا می‌کند. ⚙️ این آرایه ویژگی‌هایی شبیه به ساختارهای پیشرفته‌تر مثل ArrayList دارد که در ویدیو های بعدی معرفی میشود، اما تمرکز ما روی پیاده‌سازی قدم‌به‌قدم و درک اصول کارکرد آن است. این جلسه برای دانشجویانی که تازه با جاوا آشنا شده‌اند، بسیار مفید و کاربردی خواهد بود. 🛠️ با انجام پروژه و تمرین‌های عملی، مفاهیم پایه‌ای مدیریت حافظه و افزایش پویا ظرفیت داده‌ها را یاد می‌گیریم تا بتوانی در پروژه‌های بعدی خودت بهتر عمل کنی. 💻 سورس‌کد این پروژه در گیت‌هاب: 🔗 github.com/farzadafi/ProgrammingByFarzadAfi/tree/master/01_oop_project/dynamic_array/src 👥 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi ❓ اگر سوالی داشتی، حتماً توی گروه بپرس؛ من یا مربی‌های گروه همراهت هستیم 🚀 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار.
01:04:01🎯رایگان

📄جزوه

مفاهیم کلیدی

Dynamic Array ساختاری که برخلاف آرایه‌های معمولی، ظرفیت ثابتی ندارد و با افزایش تعداد داده‌ها، به طور خودکار فضا ایجاد می‌کند.

Capacity حداکثر ظرفیت فیزیکی فعلی یک آرایه که در هنگام تعریف اولیه یا فرآیند Resize تعیین می‌شود.

Size تعداد واقعی عناصری که در حال حاضر درون آرایه ذخیره شده‌اند.

Casting تبدیل نوع یک Object به کلاس خاص (مثل Person) برای دسترسی به متدها و ویژگی‌های اختصاصی آن کلاس.

نکات مهم مصاحبه‌ای

تفاوت اصلی بین آرایه معمولی و آرایه پویا چیست؟ آرایه معمولی طول ثابتی دارد و پس از تعریف قابل تغییر نیست، اما آرایه پویا با پر شدن فضا، ظرفیت خود را افزایش می‌دهد.

چرا استفاده از متغیر size به جای جستجوی مقادیر null بهینه‌تر است؟ جستجو برای یافتن اولین خانه خالی (null) در هر بار درج، مرتبه زمانی O(n) دارد، اما با داشتن متغیر size مستقیم به اندیس مورد نظر دسترسی داریم که مرتبه آن O(1) است.

فرآیند Resize با چه مرتبه زمانی انجام می‌شود؟ به دلیل نیاز به کپی کردن تک‌تک عناصر از آرایه قدیمی به آرایه جدید، این عملیات دارای مرتبه زمانی O(n) است.

چرا در پیاده‌سازی آرایه پویا از نوع Object استفاده می‌کنیم؟ چون کلاس Object پدر تمام کلاس‌ها در جاوا است و با این کار می‌توانیم یک لیست عمومی بسازیم که انواع مختلف داده‌ها را پشتیبانی کند.

مثال یا سناریوی کاربردی

در این آموزش، یک سیستم مدیریت افراد پیاده‌سازی شده است. ابتدا با یک آرایه ثابت از اشیاء Person شروع کردیم. مشکل اینجا بود که اگر ظرفیت ۱۰ تایی تمام می‌شد، برنامه با خطای ArrayIndexOutOfBoundsException متوقف می‌شد. برای حل این مشکل، متدی به نام resize طراحی شد که هر بار ظرفیت پر می‌شود، آرایه‌ای با طول دو برابر می‌سازد و داده‌ها را منتقل می‌کند. همچنین برای جلوگیری از ریختن داده‌های نامرتبط (مثلاً ریختن اشیاء Car در لیست Person)، مکانیزمی برای چک کردن نوع کلاس (Type Safety) با استفاده از getSimpleName اضافه شد.

بیشتر بدانید

نکته فنی برای بررسی برابری محتوای دو شیء در متدهایی مثل contains حتماً باید متدهای equals و hashCode در کلاس مورد نظر بازنویسی (Override) شده باشند.