جلسه شماره 95رایگان

Map HashMap in Java

00:16:47

توضیحات جلسه

🎥 این ویدیو قسمت هشتاد و هشتم از بوت‌کمپ رایگان جاوا است. 📚 Java Collections – Map Interface & HashMap در این جلسه وارد یکی از مهم‌ترین بخش‌های کالکشن‌ها در جاوا می‌شیم: 🔑 اینترفیس Map و به‌طور ویژه کلاس HashMap. با هم یاد می‌گیریم Map چیست، چه تفاوتی با Set و List دارد و چطور می‌تونیم داده‌ها رو به‌صورت key-value مدیریت کنیم. در این ویدیو بررسی می‌کنیم: 🧩 تعریف Map و کاربردهای آن در جاوا 🏗️ بررسی سلسله‌مراتب (Hierarchy) اینترفیس Map 🛠️ نحوه ساخت و ایجاد Object از Map و HashMap 🔄 انجام عملیات‌های متداول مثل put، get، remove و replace 📌 آشنایی با متدهای مهم اینترفیس Map 🧠 مرور نهایی برای تثبیت مفاهیم مهم 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی، می‌تونی داخل گروه بپرسی؛ من یا مربی‌های گروه کمکت می‌کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار.

جزوه و مستندات

مفاهیم کلیدی

  • Map

یک اینترفیس یا Interface در جاوا است که داده‌ها را به‌صورت جفت‌های کلید-مقدار یا Key-Value ذخیره می‌کند.

  • Key

شناسه‌ای منحصربه‌فرد در یک Map است که برای دسترسی به مقدارها استفاده می‌شود. کلیدها نمی‌توانند تکراری باشند و باید Unique باشند.

  • Value

داده‌ای است که به یک کلید خاص متصل شده است. برخلاف کلیدها، مقدارها می‌توانند تکراری باشند.

  • HashMap

یکی از پیاده‌سازی‌های معروف Map است که داده‌ها را بر اساس مکانیزم هشینگ یا Hashing ذخیره می‌کند. این ساختار در عملیات درج و جستجو سرعت بالایی دارد، اما ترتیب ورود داده‌ها را حفظ نمی‌کند.

  • LinkedHashMap

نوعی از Map است که رفتاری مشابه HashMap دارد، با این تفاوت که ترتیب درج عناصر یا Insertion Order را حفظ می‌کند.

  • TreeMap

پیاده‌سازی دیگری از Map است که عناصر را بر اساس ترتیب طبیعی کلیدها یا یک Comparator سفارشی، به‌صورت مرتب‌شده یا Sorted نگه می‌دارد.

  • Entry

یک آبجکت است که نماینده یک جفت کلید و مقدار در مپ محسوب می‌شود. از طریق entrySet() می‌توان به این جفت‌ها دسترسی داشت.

موارد مصاحبه ای

  • تفاوت اصلی بین کلید و مقدار در Map چیست؟

کلیدها حتماً باید منحصربه‌فرد یا Unique باشند، اما مقدارها یا Values می‌توانند تکراری باشند.

  • اگر یک کلید تکراری را مجدداً در Map درج کنیم، چه اتفاقی می‌افتد؟

اگر با متد put یک کلید تکراری را دوباره در Map قرار دهیم، مقدار جدید جایگزین مقدار قبلی می‌شود. در این حالت، متد put مقدار قدیمی را به‌عنوان خروجی برمی‌گرداند.

  • چرا متد keySet یک Set برمی‌گرداند اما متد values یک Collection؟

چون کلیدها در مپ همیشه منحصربه‌فرد هستند و این ویژگی، رفتار اصلی ساختار Set است. اما مقدارها می‌توانند تکراری باشند و لزوماً ویژگی‌های یک ست را ندارند؛ بنابراین متد values یک Collection برمی‌گرداند.

  • کدام پیاده‌سازی‌های Map اجازه استفاده از کلید نال null key را می‌دهند؟

HashMap و LinkedHashMap اجازه می‌دهند یک کلید null داشته باشید. اما TreeMap اجازه استفاده از کلید null را نمی‌دهد.

  • تفاوت متد remove(key) با remove(key, value) در چیست؟

متد remove(key) فقط با دریافت کلید، آن را حذف می‌کند و مقدار مربوط به آن را برمی‌گرداند.

متد remove(key, value) فقط زمانی جفت موردنظر را حذف می‌کند که هم کلید و هم مقدار دقیقاً با ورودی‌ها مطابقت داشته باشند. خروجی این متد از نوع boolean است.

سناریو کاربردی

در این آموزش، نحوه کار با یک دفترچه تلفن ساده یا لیست ذخیره‌سازی اطلاعات با استفاده از HashMap شبیه‌سازی شده است:

۱. تعریف و مقداردهی

ابتدا یک Map با کلید از نوع Integer، یعنی شناسه، و مقدار از نوع String، یعنی نام، تعریف می‌شود.

۲. افزودن داده

با استفاده از متد put داده‌هایی مانند (1, "First") اضافه می‌شوند.

۳. به‌روزرسانی

نشان داده شد که اگر دوباره برای کلید 1 مقدار جدیدی با متد put ثبت شود، مقدار قبلی تغییر می‌کند و مقدار جدید جایگزین آن می‌شود.

۴. حذف

با استفاده از متد remove و بر اساس کلید، یک آیتم از لیست حذف می‌شود.

۵. پیمایش Iteration

برای چاپ تمام اعضا، از متد entrySet() داخل یک حلقه for-each استفاده می‌شود. در هر مرحله، به ازای هر Entry در مپ، متدهای getKey() و getValue() صدا زده می‌شوند.

بیشتر بدانید

  • نکته متد put

خروجی متد put از نوع همان Value تعریف‌شده در مپ است. اگر کلید از قبل وجود داشته باشد، مقدار قبلی آن را برمی‌گرداند و اگر وجود نداشته باشد، مقدار null برمی‌گرداند.

  • بررسی وجود داده

با استفاده از متدهای containsKey(key) و containsValue(value) می‌توانید بدون خطا گرفتن، از وجود یک کلید یا مقدار خاص در مپ مطمئن شوید.

  • پاکسازی کلی

متد clear() تمام اعضای موجود در مپ را حذف می‌کند و سایز آن را به صفر می‌رساند.

  • مدیریت در محیط‌های چندرشته‌ای

برای کار در محیط‌های Multi-threading، می‌توان از Hashtable که Synchronized است یا از ConcurrentHashMap استفاده کرد.