Farzad Afi Logo

FarzadAfi

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

Map HashMap in Java

📖توضیحات درس

🎥 این ویدیو قسمت هشتاد و هشتم از بوت‌کمپ رایگان جاوا است. 📚 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 هر سوالی داشتی، می‌تونی داخل گروه بپرسی؛ من یا مربی‌های گروه کمکت می‌کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار.
00:16:47🎯رایگان

📄جزوه

مفاهیم کلیدی

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

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

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

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

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

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

  • Entry یک آبجکت که نماینده یک جفت کلید و مقدار در مپ است. از طریق EntrySet می‌توان به این جفت‌ها دسترسی داشت.

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

  • تفاوت اصلی بین کلید و مقدار در Map چیست؟ کلیدها حتماً باید منحصربه‌فرد (Unique) باشند، اما مقادیر (Values) می‌توانند تکراری باشند.

  • اگر یک کلید تکراری را مجدداً در Map درج کنیم (Put) چه اتفاقی می‌افتد؟ مقدار جدید جایگزین مقدار قبلی می‌شود و متد put مقدار قدیمی را که جایگزین شده است، به عنوان خروجی برمی‌گرداند.

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

  • کدام پیاده‌سازی‌های Map اجازه استفاده از کلید نال (null key) را می‌دهند؟ HashMap و LinkedHashMap اجازه می‌دهند یک کلید نال داشته باشید، اما TreeMap اجازه استفاده از کلید نال را نمی‌دهد.

  • تفاوت متد remove(key) با remove(key, value) در چیست؟ متد اول فقط با گرفتن کلید، آن را حذف کرده و مقدارش را برمی‌گرداند. متد دوم تنها در صورتی جفت مورد نظر را حذف می‌کند که هم کلید و هم مقدار دقیقاً با ورودی مطابقت داشته باشند و یک مقدار boolean برمی‌گرداند.

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

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

۱. تعریف و مقداردهی: ابتدا یک Map با کلید از نوع Integer (شناسه) و مقدار از نوع String (نام) تعریف می‌شود. ۲. افزودن داده: با استفاده از متد put داده‌هایی مثل (1, "First") اضافه می‌شوند. ۳. به‌روزرسانی: نشان داده شد که اگر دوباره برای کلید ۱ مقدار جدیدی put شود، نام قبلی تغییر کرده و مقدار جدید جایگزین می‌شود. ۴. حذف: با استفاده از متد remove بر اساس کلید، یک آیتم از لیست حذف می‌گردد. ۵. پیمایش (Iteration): برای چاپ تمام اعضا، از متد entrySet() داخل یک حلقه for-each استفاده می‌شود تا به ازای هر Entry در مپ، متدهای getKey() و getValue() صدا زده شوند.

بیشتر بدانید

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

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

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

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