Map HashMap in Java
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
-
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استفاده کرد.
