Maps

Maps

Mamadiom


خب قبلا در مورد اینترفیس ها صحبت کردیم. اینبار میخوایم به مفهومی اشاره کنیم به نام Map که به خودی خود نمیشه ساختش. یچیزی شبیه لیست ها. لیست رو همینجوری نمیتونی پیاده سازی کنی. دلیلش هم ماهیتش هست که اینترفیس هست.

مپ دوتا ویژگی داره. یه کلید و یک مقدار.هر مقدار نهایتا یک کلید میتونه داشته باشه و اگه برای کلید تکراری، مقدار دیگه ای روتعریف کنید، مقدار جدید جایگزین مقدار قبلی میشه.

سه کلاس وجود داره که مپ رو پیاده سازی میکنن. HashMap , TreeMap, LinkedHashMap

تنها تفاوتی که دارن، تفاوت بین ترتیب ذخیره سازی داده هستش. مثلا هش مپ هردمبیل ذخیره میکنه و چینش شما براش فرقی نداره😁 و در مقابل TreeMap بصورت سورت شده و LinkedHashMap به ترتیب ورودی ذخیره میکنه.

در حال حاضر ما فقط با HashMap سر کار داریم و به اون دوتا کاری نداریم.

HashMap

برای پیاده سازی یک ابجکت ازش ایجاد میکنیم. دو حالت برای اینکار وجود داره:

ترجیح من بر حالت اول هست. چون بخاطر اینترفیس، انعطاف پذیری بیشتری برای سوییچ کردن به باقی کلاس ها وجود داره.

Example - Dictionary

فرض کنید میخوایم یک لغت نامه یا دیکشنری بنویسیم.

یعنی به ازای هر کلمه یک معنی داریم. کلمات رو بعنوان کلید (key) و معنی رو بعنوان مقدار (value) در نظر بگیرید.


یک متد برای اضافه کردن به مپ وجود داره به نام put. در این متد ارگومان اول بعنوان کلید و دوم بعنوان مقدار در نظر گرفته میشود. پس برای اضافه کردن کلمات به اینصورت عمل میکنیم:

حالا برای چاپ کردنشون چی؟

یه متد داریم به نام get و کار get گرفتن کلید و چاپ مقدار هست:

اما برای پیمایش کل هش مپ، لازمه که به کل کلید ها دسترسی داشته باشیم. یک متد وجود داره به نام keySet که کلید هارو با ساختار داده set خروجی میده. فعلا برای set در این حد داشته باشین که set مقدار تکراری رو نمیپذیره (برای همین بود که گفتیم هر مقدار نهایتا یک کلید میتونه داشته باشه). اگه من بیام از map.ketSet() خروجی بگیرم، به من کل کلید هارو خروجی میده:

حالا برای پیمایش در سرتاسر هش مپ ، احتیاج به یه Enhanced for loop داریم. شمارنده این حلقه هم نوع با کلید خواهد بود. در اینجا نوع کلید ها از نوع رشته هست پس شمارنده هم از نوع رشته باید باشه. حالا که شمارنده رو داریم، در سرتاسر کلید ها پیمایش رو شروع میکنیم و مقادیر هر کلید رو روبروی کلید نمایش میدیم:

جهت یاد آوری، همونطور که میبینید هش مپ ترتیب اضافه کردن داده هامون رو بهم ریخته

remove() && replace()

متد ریموو دو حالت داره. حالت اول کلید رو دریافت میکنه و اون مقدار رو از هش مپ حذف میکنه. اما نوع بازگشتی رشته داره و اون هم به اینصورت هست که مقدار حذف شده رو بازگشت میده.

حالت دوم کلید و مقدار رو میگیره و اگر با هم جور بودن، اون مقدار رو حذف و مقدار ترو رو برگشت میده. در غیر اینصورت مقدار فالس رو برگشت میده

حالت سوم هم برای جایگزین کردن مقدار جدید با مقدار قبلی هست:

متد replace یه حالت دیگه هم داره و اون هم در صورتی مقدار جدید رو جایگزین میکنه که مقدار قبلی و کلید رو درست وارد کرده باشید:

containsKey()

این متد برای بررسی شرط وجود یک کلید به کار میره:

تامام D:

1:37AM

1.12.1400

2.20.2022

Report Page