Map در جاوا چیست؟ – توضیح مپ به زبان ساده + مثال

۶۸۲ بازدید
آخرین به‌روزرسانی: ۳۱ تیر ۱۴۰۲
زمان مطالعه: ۱۴ دقیقه
Map در جاوا چیست؟ – توضیح مپ به زبان ساده + مثال

Map در جاوا شامل مجموعه‌ای از جفت‌های «کلید-مقدار» (Key-Value) است. ساختار داده Map گزینه مناسبی برای ذخیره‌سازی اطلاعات محسوب می‌شود، زیرا متدهای مختلفی در زمینه ذخیره، جستجو، دسترسی و بازیابی اطلاعات دارد. در نتیجه، برای یک برنامه‌نویس جاوا آشنایی با این اینترفیس ضروری به نظر می‌رسد. بر همین اساس، در این مطلب از مجله فرادرس به این سوال پاسخ داده خواهد شد که Map در جاوا چیست و چرا اهمیت دارد. با مطالعه این مطلب با انواع Map در جاوا و نحوه پیاده‌سازی آن‌ها آشنا خواهید شد. همچنین، متدهای مختلف Map همراه با مثال عملی در این مطلب مورد بررسی قرار گرفته‌ است.

فهرست مطالب این نوشته

Map در جاوا چیست؟

map در جاوا درون پکیج java.util  قرار دارد و برای پیاده‌سازی بسیاری از توابع و عملیات‌های مختلف مورد استفاده قرار می‌گیرد. این «اینترفیس» (Interface) پرکاربرد در جاوا روشی آسان برای ذخیره‌سازی و دسترسی به اطلاعات به صورت جفت «کلید-مقدار» (Key-Value) فراهم می‌کند.

محدودیتی در ذخیره‌‌سازی جفت‌های «کلید-مقدار» درون Map در جاوا وجود ندارد، اما کلیدها باید منحصر به فرد و غیرتکراری باشند. گاهی اوقات به اشتباه Map را به عنوان زیر مجموعه‌ای از ساختمان داده Collections در جاوا در نظر می‌گیرند، ولی این دو مفهوم کاملاً مستقل از هم هستند.

کاربرد نوع داده Map در جاوا چیست؟

Mapها گزینه مناسبی برای ذخیره‌سازی اطلاعات با ساختار «کلید-مقدار» محسوب می‌شوند. Map در جاوا برای عملیاتی همچون جستجو، بازیابی و بروزرسانی اطلاعات به کمک کلیدها مورد استفاده قرار می‌گیرد. به عنوان مثال، استفاده از Map به یک فروشگاه این امکان را می‌دهد تا در صورت نیاز به سرعت یک خرید خاص را تنها به کمک شماره تراکنش ردیابی کند.

map در جاوا

در ادامه، برخی از اطلاعاتی ارائه شده است که می‌توان به کمک Map در جاوا ذخیره‌سازی کرد.

  • فهرست خطاهای برنامه و توضیحات مربوط به آن‌ها
  • فهرست شهرها به همراه کد منطقه
  • فهرست از کارمندان و مدیران
  • فهرستی از کلاس‌ها و دانشجویان

نکته‌ مهم در خصوص اطلاعات فوق این است که تمام این داده‌ها را می‌توان در قابل جفت‌های «کلید-مقدار» ذخیره‌سازی کرد.

منظور از سلسله مراتب Map در جاوا چیست؟

Map به عنوان اینترفیس در زبان برنامه نویسی جاوا شناخته می‌شود. در نتیجه، کلاس‌های زیادی از این اینترفیس مشتق یا پیاده‌سازی شده‌اند، زیرا در «برنامه نویسی شی‌گرا» (Object Oriented Programming) امکان ساخت اشیا از طریق اینترفیس وجود ندارد. در این بخش از نوشته به این سوال پاسخ داده خواهد شد که منظور از مشتق شدن SortedMap از اینترفیس Map در جاوا چیست و همچنین، چه تفاوتی بین مشتق‌شدن و پیاده‌سازی وجود دارد.

تفاوت Extends و Implements

اینترفیس SortedMap از اینترفیس Map «مشتق» (Extends) شده است. بنابراین، امکان استفاده از متدهای اینترفیس Map در این اینترفیس جدید وجود دارد. همچنین، می‌توان متدهای جدیدی را نیز به آن اضافه کرد. اینترفیس SortedMap در جاوا امکان مرتب‌سازی بر اساس کلید را فراهم کرده است که این مورد در اینترفیس Map وجود ندارد.

کلاس TreeMap از اینترفیس SortedMap «پیاده‌سازی» (Implements) شده است. این مورد بدان معنا است که کلاس TreeMap متدهای خود را دارد، ولی این کار از طریق SortedMap امکان‌پذیر شده است. در تصویر زیر تمام کلاس‌ها و اینترفیس‌های مشتق شده و پیاده‌سازی شده از اینترفیس Map در جاوا نشان داده شده است.

منظور از سلسله مراتب Map در جاوا چیست

انواع کلاس‌های Map در جاوا چیست؟

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

همان طور که پیش‌تر نیز عنوان شد، امکان پیاده‌سازی کلاس‌های مختلف از طریق دو اینترفیس Map و SortedMap وجود دارد. کلاس‌های HashMap ،LinkedHashMap و TreeMap از اینترفیس Map در جاوا پیاده‌سازی شده‌اند. در ادامه ضمن بررسی انواع کلاس‌های Map به این سوال پاسخ داده شده است که کاربرد هر کدام از کلاس‌های مشتق‌شده یا پیاده‌سازی شده از اینترفیس Map در جاوا چیست.

کلاس HashMap در جاوا

کلاس HashMap یکی از پیاده‌سازی‌های اینترفیس Map در جاوا است که اطلاعات را به صورت جفت «کلید-مقدار» ذخیره می‌کند. کلیدها در این ساختار منحصر به فرد هستند و هر کلید برای مرتبط کردن یک مقدار مشخص در Map استفاده می‌شود.

کلاس HashMap در جاوا

نحوه ذخیره‌سازی اطلاعات در HashMap به صورت «غیرهمگام» (Unsynchronised) است و از ترتیب خاصی برای ذخیره‌سازی پیروی نمی‌کند. بنابراین، این ساختار نسبت به Map در جاوا از سرعت بیشتری برخوردار است و از حافظه کمتری نیز استفاده می‌کند. علاوه بر این، ساختار HashMap در جاوا اضافه کردن کلیدهای «تهی» (Null) را نیز امکان‌پذیر کرده است، اما تنها از یک کلید تهی می‌توان استفاده کرد.

کلاس LinkedHashMap در جاوا چه کاربردی دارد؟

کلاس LinkedHashMap در جاوا از کلاس HashMap ارث‌بری می‌کند. در نتیجه، این کلاس از تمام ویژگی‌های کلاس HashMap برخوردار است. علاوه بر این، کلاس LinkedHashMap ویژگی اضافی برای حفظ ترتیب عناصر درج شده نیز دارد.

map در جاوا

کلاس HashMap قابلیت‌هایی برای درج، جستجو و حذف سریع عناصر را ارائه می‌کند، اما امکانی برای حفظ ترتیب درج عناصر ندارد. در نقطه مقابل، کلاس LinkedHashMap در جاوا علاوه بر قابلیت‌های کلاس HashMap امکان دسترسی به عناصر به ترتیب درج آن‌ها را فراهم کرده است.

مهم‌ترین ویژگی‌های کلاس LinkedHashMap در جاوا کدامند؟

کلاس LinkedHashMap علاوه بر قابلیت‌های فوق دارای ویژگی‌های زیر است.

  • در کلاس LinkedHashMap به ازای هر کلید مقدار مشخصی وجود دارد. این کلاس اینترفیس Map را پیاده‌سازی می‌کند و از کلاس HashMap مشتق شده است.
  • تنها شامل عناصر منحصر به فرد است.
  • امکان داشتن فقط یک کلید تهی را دارد، ولی می‌تواند چندین مقدار تهی داشته باشد.
  • غیرهمگام است.
  • تنها تفاوت آن با کلاس HashMap در جاوا داشتن ویژگی برای حفظ ترتیب درج عناصر است.

کاربرد کلاس TreeMap در جاوا چیست؟

کلاس TreeMap در جاوا از اینترفیس SortedMap پیاده‌سازی شده است. این کلاس مجموعه‌ای مرتب از جفت‌های «کلید-مقدار» را ارائه می‌کند که در این مجموعه کلیدها بر اساس ترتیب درج شدن مرتب می‌شوند. همچنین، امکان مرتب‌سازی کلیدها به صورت سفارشی با افزودن شرط نیز وجود دارد.

مپ در جاوا

در ادامه، مهم‌ترین ویژگی‌های کلاس TreeMap در جاوا ارائه شده است.

  • کلاس TreeMap همانند کلاس Map در جاوا امکان استفاده از کلیدهای تهی را نمی‌دهد و خطای «استثنای اشاره‌گر تهی» (Null Pointer Exception) را برمی‌گرداند. با این وجود امکان داشتن چندین مقدار تهی با کلیدهای مختلف در TreeMap وجود دارد.
  • این کلاس ضمن پیاده‌سازی اینترفیس SortedMap از اینترفیس Map در جاوا نیز مشتق شده است.
  • ذخیره اطلاعات به صورت غیرهمگام در آن صورت می‌گیرد.
  • TreeMap ترتیب صعودی را حفظ می‌کند.

پیاده‌سازی کلاس Map در جاوا

بعد از آشنایی با انواع کلاس‌های Map در جاوا در این بخش از نوشته نحوه تعریف یک شی جدید از این کلاس‌ها مورد بررسی قرار گرفته است. به طور کلی نحوه تعریف شی جدید در تمام کلاس‌های مرتبط با Map همچون HashMap ،TreeMap و LinkedHashMap یکسان است.

نحوه تعریف شی جدید از کلاس‌های Map در جاوا به چه صورت است؟

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

1HashMap<String, Integer> mymap = new HashMap<String, Integer>();

فرایند فوق برای تعریف شی جدید در تمام کلاس‌های Map یکسان است و تنها با تغییر نوع کلاس می‌توان شی جدید مورد نظر را ایجاد کرد. در ادامه، مثال‌هایی از تعریف و پیاده‌سازی انواع Map در جاوا ارائه شده است.

مهم‌ترین نکات برای پیاده‌سازی Map در جاوا چیست؟

پیش از شروع پیاده‌سازی انواع Map در جاوا در این بخش به این سوال پاسخ داده خواهد شد که مهم‌ترین نکات برای پیاده‌سازی Map در جاوا چیست. در ادامه، این نکات ارائه شده است.

  • دو اینترفیس Map و SortedMap برای پیاده‌سازی Map در جاوا وجود دارد. علاوه بر این، امکان دسترسی به سه کلاس TreeMap ،HashMap و LinkedHashMap نیز فراهم است.
  • کلیدها در ساختار Map منحصر به فرد هستند و امکان استفاده از کلیدهای تکراری درون Map وجود ندارد. برخی از پیاده‌سازی‌های Map نظیر HashMap و LinkedHashMap اجازه استفاده از کلید تهی و مقادیر null را می‌دهند.
  • ترتیب عناصر درون Map ارتباط مستقیمی با نحوه پیاده‌سازی آن‌ها دارد. به عنوان مثال، در دو کلاس TreeMap و LinkedHashMap عناصر به صورت ترتیبی درج می‌شوند، ولی در کلاس HashMap این قابلیت وجود ندارد.

ساخت HashMap در جاوا

برای ساخت HashMap در جاوا ابتدا باید پکیج java.util.HashMap  در برنامه ایمپورت شود. در گام بعدی برای ساخت HashMap کد زیر را باید در برنامه قرار داد.

1HashMap<K, V> languages = new HashMap<>();

در نمونه کد بالا، HashMap با نام languages  ایجاد شده است. حروف K  و V  به ترتیب نشان دهنده نوع داده‌ای کلید و نوع داده‌ای مقدار این HashMap هستند. در ادامه، این ساختار با تعیین نوع داده‌ای کلید و مقدار مشخص شده است.

1HashMap<String, Integer> languages = new HashMap<>();

نوع داده‌ای کلید در مثال بالا «رشته» (String) و نوع داده‌ای مقدار «عدد صحیح» (Integer) است. در ادامه، کد کامل مربوط به پیاده‌سازی HashMap در جاوا ارائه شده است.

1import java.util.HashMap;
2
3class Main {
4    public static void main(String[] args) {
5
6        // create a hashmap
7        HashMap<String, Integer> languages = new HashMap<>();
8
9        // add elements to hashmap
10        languages.put("Java", 8);
11        languages.put("JavaScript", 1);
12        languages.put("Python", 3);
13        System.out.println("HashMap: " + languages);
14    }
15}

در مثال بالا، بعد از ایجاد HashMap با نام languages  اطلاعات مورد نظر در قالب جفت «کلید-مقدار» با استفاده از متد put  درون آن درج شده است. خروجی نمونه کد بالا در ادامه آورده شده است.

HashMap: {Java=8, JavaScript=1, Python=3}

ساخت LinkedHashMap در جاوا

برای ساخت LinkedHashMap در جاوا می‌توان پکیج زیر را در برنامه ایمپورت کرد.

1import java.util.*;  

دستور فوق امکان دسترسی به تمام کلاس‌ها، کتابخانه‌ها و متدهای موجود در پکیج java.util  را در برنامه فراهم می‌کند. در گام بعدی شی جدیدی از کلاس LinkedHashMap باید ایجاد کرد.

1  LinkedHashMap<Integer,String> hm= new LinkedHashMap<Integer,String>();  

سپس به کمک متد put  چندین جفت «کلید-مقدار» به شی مورد نظر اضافه شده است. در ادامه، نمونه کد مربوط به ساخت LinkedHashMap در جاوا به صورت کامل آورده شده است.

1import java.util.*;  
2class LinkedHashMap1{  
3 public static void main(String args[]){  
4   
5  LinkedHashMap<Integer,String> hm=new LinkedHashMap<Integer,String>();  
6  
7  hm.put(100,"Amit");  
8  hm.put(101,"Vijay");  
9  hm.put(102,"Rahul");  
10  
11for(Map.Entry m:hm.entrySet()){  
12   System.out.println(m.getKey()+" "+m.getValue());  
13  }  
14 }  
15}  

خروجی حاصل از اجرای نمونه کد بالا به صورت زیر خواهد بود.

100 Amit
101 Vijay
102 Rahul

ساخت TreeMap در جاوا

روال ساخت TreeMap در جاوا مشابه با سایر کلاس‌های Map است. برای این منظور ابتدا پکیج java.util  باید در برنامه ایمپورت شود.

1import java.util.*; 

در گام بعدی نیز شی جدیدی از نوع کلاس TreeMap باید ایجاد شود و جفت‌های «کلید-مقدار» به این شی اضافه شوند. قطعه کد زیر نحوه پیاده‌سازی کلاس Treemap را نشان می‌دهد.

1import java.util.*;  
2class TreeMap1{  
3 public static void main(String args[]){  
4   TreeMap<Integer,String> map=new TreeMap<Integer,String>();    
5      map.put(100,"Amit");    
6      map.put(102,"Ravi");    
7      map.put(101,"Vijay");    
8      map.put(103,"Rahul");    
9        
10      for(Map.Entry m:map.entrySet()){    
11       System.out.println(m.getKey()+" "+m.getValue());    
12      }    
13 }  
14}  

در ادامه، خروجی حاصل از اجرای نمونه کد بالا نشان داده شده است.

100 Amit
101 Vijay
102 Ravi
103 Rahul
با بررسی خروجی حاصل از اجرای کد بالا مشخص می‌شود که کلاس TreeMap در جاوا ترتیب صعودی کلیدها را حفظ می‌کند.

کاربرد متدهای Map در جاوا چیست؟

بعد از آشنایی با انواع کلاس‌های Map در جاوا و توانایی پیاده‌سازی شی جدید از این کلاس‌ها در گام بعدی باید بتوان با این اشیا ارتباط برقرار کرد. در زبان برنامه نویسی جاوا از متد برای برقراری ارتباط با اشیا استفاده می‌شود.

برنامه نویسی جاوا

کلاس Map در جاوا متدهای مختلفی برای ارتباط با اشیا دارد که هر کدام برای انجام یک سری اقدامات خاص مورد استفاده قرار می‌گیرند. فهرست متدهای Map بسیار گسترده است و نیازی به یادگیری همه آن‌ها نیست. با این وجود در این بخش از نوشته سعی شده است تا برخی از مهم‌ترین متدهای Map مورد بررسی قرار گیرد.

متدهای درج اطلاعات در کلاس Map

متدهای مختلفی برای درج اطلاعات به صورت جفت «کلید-مقدار» در کلاس Map وجود دارد. آشنایی با این متدها و عملکردشان به برنامه‌نویس این امکان را می‌دهد تا با توجه به شرایط از متد مناسب استفاده کند. در ادامه، متدهای کلاس Map برای درج اطلاعات آورده شده است.

  • put(Object, Object)  : این متد برای مرتبط کردن مقدار مشخص شده با کلید مورد استفاده قرار می‌گیرد. پارامتر اول در این متد برای کلید و پارامتر دوم برای مقدار در نظر گرفته شده است. با استفاده از این متد می‌توان عنصر جدیدی را به Map اضافه کرد.
  • putAll(Map)  : با استفاده از این متد می‌توان تمام اطلاعات مربوط به یک شی از نوع Map را در شی جدید کپی کرد. پارامتر ورودی این متد تنها یک متغیر از نوع Map است.
  • putIfAbsent(K key, V value)  : این متد ابتدا کلید داده شده را بررسی می‌کند و در صورت نبود مقداری مشابه با آن درون Map عملیات درج اطلاعات را انجام می‌دهد و مقدار تهی را برگشت می‌دهد. در غیر این صورت عملیات درج انجام نمی‌شود و مقدار فعلی برگشت داده می‌شود.

متدهای حذف و جایگزینی اطلاعات در کلاس Map

برای حذف اطلاعات موجود درون Map می‌توان از متدهای زیر استفاده کرد.

  • clear()  : این متد تمام عناصر و اطلاعات موجود درون Map را به طور کامل حذف می‌کند.
  • remove(Object)  : با استفاده از این متد می‌توان اطلاعات متناظر با کلید داده شده را از درون Map حذف کرد.
  • replace(K,V)  : این متد مقدار متناظر با کلید K را با مقدار جدید V جایگزین می‌کند.
  • replace(K, oldValue, newValue)  : این متد در صورتی مقدار newValue را به کلید K اختصاص می‌دهد که کلید K با مقدار oldValue متناظر باشد.

متدهای دسترسی به اطلاعات در کلاس Map

برای دسترسی به اطلاعات درون Map می‌توان از متدهای زیر استفاده کرد.

  • get(Object)  : این متد برای بازیابی یا واکشی اطلاعات متناظر با کلید داده شده مورد استفاده قرار می‌گیرد. کلید مورد نظر به عنوان پارامتر ورودی به این متد داده می‌شود. در صورت عدم وجود کلید درون Map مقدار Null برگشت داده می‌شود.
  • getOrDefault(Object key, V defaultValue)  : این متد در صورت وجود مقدار برای کلید داده شده آن مقدار را برگشت می‌دهد و در غیر این صورت مقدار پیش‌فرض مشخص شده برگشت داده خواهد شد.
  • values()  : این متد مجموعه‌ای از مقادیر درون Map را برمی‌گرداند.
  • ContainsKey(Object)  : این متد وجود یا عدم وجود کلید داده شده درون Map را بررسی می‌کند. در صورت وجود کلید مقدار True و در غیر این صورت مقدار False برگشت داده می‌شود.
  • ContainsValue(Object)  : این متد برای بررسی وجود یا عدم وجود یک مقدار خاص درون Map مورد استفاده قرار می‌گیرد. مقدار مورد نظر به عنوان پارامتر ورودی به این متد ارسال می‌شود و در صورت وجود درون Map مقدار True برگشت داده خواهد شد.
  • equals(Object)  : این متد برای بررسی برابری دو شی از نوع Map مورد استفاده قرار می‌گیرد. پارامتر ورودی این متد یک شی از نوع Map است.

سایر متدهای کاربردی موجود در کلاس Map

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

  • size()  : این متد تعداد عناصر موجود در Map را برگشت می‌دهد. منظور از تعداد عناصر تعداد جفت‌های «کلید و مقدار» موجود درون Map است.
  • isEmpty()  : برای بررسی خالی بودن یا نبودن Map از این متد استفاده می‌شود. در صورت نبود هیچ عنصری درون Map مقدار True برگشت داده خواهد شد.
  • entrySet()  : این متد برای ساخت مجموعه‌ای از عناصر درون Map مورد استفاده قرار می‌گیرد.
  • keySet()  : این متد مجموعه‌ای از کلیدهای موجود در Map مورد نظر را برگشت می‌دهد.

چند مثال از Map در جاوا

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

افزودن عنصر به Map در جاوا

برای افزودن عنصر جدید به Map از متد put  استفاده می‌شود. نمونه کد زیر نحوه افزودن عنصر به Map را نشان می‌دهد.

1// Java program to demonstrate
2// the working of Map interface
3
4import java.util.*;
5class GFG {
6	public static void main(String args[])
7	{
8		// Default Initialization of a
9		// Map
10		Map<Integer, String> hm1 = new HashMap<>();
11
12		// Initialization of a Map
13		// using Generics
14		Map<Integer, String> hm2
15			= new HashMap<Integer, String>();
16
17		// Inserting the Elements
18		hm1.put(1, "Geeks");
19		hm1.put(2, "For");
20		hm1.put(3, "Geeks");
21
22		hm2.put(new Integer(1), "Geeks");
23		hm2.put(new Integer(2), "For");
24		hm2.put(new Integer(3), "Geeks");
25
26		System.out.println(hm1);
27		System.out.println(hm2);
28	}
29}

در مثال بالا، دو شی به نام‌های hm1  و hm2  از نوع HashMap  ایجاد شده‌اند و مقادیر مورد نظر به صورت جفت «کلید-مقدار» با استفاده از متد put  به این دو شی اضافه شده است. خروجی حاصل از اجرای نمونه کد بالا به صورت زیر است.

{1=Geeks, 2=For, 3=Geeks}
{1=Geeks, 2=For, 3=Geeks}

بروزسانی مقادیر درون Map در جاوا

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

1// Java program to demonstrate
2// the working of Map interface
3
4import java.util.*;
5class GFG {
6	public static void main(String args[])
7	{
8
9		// Initialization of a Map
10		// using Generics
11		Map<Integer, String> hm1
12			= new HashMap<Integer, String>();
13
14		// Inserting the Elements
15		hm1.put(new Integer(1), "Geeks");
16		hm1.put(new Integer(2), "Geeks");
17		hm1.put(new Integer(3), "Geeks");
18
19		System.out.println("Initial Map " + hm1);
20
21		hm1.put(new Integer(2), "For");
22
23		System.out.println("Updated Map " + hm1);
24	}
25}

خروجی حاصل از اجرای نمونه کد بالا به صورت زیر است.

Initial Map {1=Geeks, 2=Geeks, 3=Geeks}
Updated Map {1=Geeks, 2=For, 3=Geeks}
با نگاهی به خروجی می‌توان لیست اول و دوم را مقایسه کرد. در لیست دوم مقدار مربوط به عنصر دوم تغییر کرده است.

حذف عنصر از Map در جاوا

برای حذف عنصر از Map در جاوا از متد remove()  باید استفاده کرد. در این روش کلید مورد نظر به عنوان پارامتر ورودی ارسال می‌شود و در صورت وجود این کلید درون Map اطلاعات مورد نظر از Map حذف خواهد شد. نمونه کد زیر نحوه استفاده از متد remove()  برای حذف عناصر از Map را نشان می‌دهد.

1// Java program to demonstrate
2// the working of Map interface
3
4import java.util.*;
5class GFG {
6
7	public static void main(String args[])
8	{
9
10		// Initialization of a Map
11		// using Generics
12		Map<Integer, String> hm1
13			= new HashMap<Integer, String>();
14
15		// Inserting the Elements
16		hm1.put(new Integer(1), "Geeks");
17		hm1.put(new Integer(2), "For");
18		hm1.put(new Integer(3), "Geeks");
19		hm1.put(new Integer(4), "For");
20
21		// Initial Map
22		System.out.println(hm1);
23
24		hm1.remove(new Integer(4));
25
26		// Final Map
27		System.out.println(hm1);
28	}
29}

در نمونه کد بالا دستور hm1.remove(new Integer(4))  اطلاعات مربوط به عنصر با کلید داده شده را از درون Map حذف می‌کند. خروجی حاصل از اجرای نمونه کد بالا پس از حذف عنصر مورد نظر به صورت زیر است.

{1=Geeks, 2=For, 3=Geeks, 4=For}
{1=Geeks, 2=For, 3=Geeks}

پیمایش عناصر Map در جاوا

روش‌های زیادی برای پیمایش عناصر موجود درون Map وجود دارد. آسان‌ترین راه برای پیمایش عناصر استفاده از حلقه for جاوا به همراه متد get()  است. نمونه کد زیر نحوه پیمایش عناصر Map در جاوا را نمایش می‌دهد.

1// Java program to demonstrate
2// the working of Map interface
3
4import java.util.*;
5class GFG {
6	public static void main(String args[])
7	{
8
9		// Initialization of a Map
10		// using Generics
11		Map<Integer, String> hm1
12			= new HashMap<Integer, String>();
13
14		// Inserting the Elements
15		hm1.put(new Integer(1), "Geeks");
16		hm1.put(new Integer(2), "For");
17		hm1.put(new Integer(3), "Geeks");
18
19		for (Map.Entry mapElement : hm1.entrySet()) {
20			int key = (int)mapElement.getKey();
21
22			// Finding the value
23			String value = (String)mapElement.getValue();
24
25			System.out.println(key + " : " + value);
26		}
27	}
28}

خروجی حاصل از اجرای کد بالا به صورت زیر خواهد بود.

1 : Geeks
2 : For
3 : Geeks

محاسبه تعداد عناصر موجود در Map در جاوا

در بسیاری از برنامه‌ها نیاز است تا تعداد دقیق تکرار یک عدد یا حرف خاص محاسبه شود. بر این اساس در این بخش با استفاده از متدهای putIfAbsent()  و Collections.frequency()  تعداد دقیق اعداد موجود درون Map محاسبه شده است. نمونه کد زیر نحوه پیاده‌سازی برای محاسبه عناصر موجود را نشان می‌دهد.

1// Java program to Count the Occurrence
2// of numbers using Hashmap
3import java.util.*;
4
5class HelloWorld {
6	public static void main(String[] args)
7	{
8		int a[] = { 1, 13, 4, 1, 41, 31, 31, 4, 13, 2 };
9
10		// put all elements in arraylist
11		ArrayList<Integer> aa = new ArrayList();
12		for (int i = 0; i < a.length; i++) {
13			aa.add(a[i]);
14		}
15
16		HashMap<Integer, Integer> h = new HashMap();
17
18		// counting occurrence of numbers
19		for (int i = 0; i < aa.size(); i++) {
20			h.putIfAbsent(aa.get(i), Collections.frequency(
21										aa, aa.get(i)));
22		}
23		System.out.println(h);
24	}
25}

خروجی حاصل از اجرای نمونه کد بالا فراوانی هر کدام از اعداد موجود در آرایه a[]  را نشان می‌دهد.

{1=2, 2=1, 4=2, 41=1, 13=2, 31=2}

سوالات متداول Map در جاوا

در این بخش از نوشته سعی شده است تا به متداول‌ترین سوالات در زمینه Map در جاوا پاسخ داده شود.

چه زمانی از Map در جاوا استفاده می‌شود؟

اینترفیس Map در جاوا اطلاعات را به صورت جفت «کلید-مقدار» ذخیره می‌کند. Mapها گزینه مناسبی برای ذخیره‌سازی اطلاعات هستند، زیرا بازیابی، جستجو، دسترسی و تغییر مقادیر از طریق کلیدها به آسانی صورت می‌گیرد. به عنوان مثال، Map برای ذخیره اطلاعات به صورت جفت «کلید-مقدار» نظیر اطلاعات مربوط به تراکنش خرید، اطلاعات دانش آموزان، اطلاعات کارمندان و سایر موارد گزینه بسیار مناسبی است.

تفاوت Collection با Map در جاوا چیست؟

Collection در جاوا ساختار داده‌ای برای ذخیره‌سازی اطلاعات به صورت مجموعه است. در نقطه مقابل، Map در جاوا ساختاری برای ذخیره اطلاعات به صورت جفت «کلید-مقدار» محسوب می‌شود. تفاوت اصلی بین این دو ساختار استفاده از کلید برای ذخیره‌سازی در ساختار Map است که Collection در جاوا چنین امکانی ندارد.

آیا امکان استفاده از مقادیر تکراری درون Map وجود دارد؟

امکان استفاده از نوع‌های داده‌ای مختلف به عنوان کلید در Map وجود دارد، ولی استفاده از کلیدهای تکراری در این ساختار مجاز نیست.

نحوه بررسی وجود کلید درون Map در جاوا چیست؟

بعد از ایجاد شی از کلاس Map در جاوا به کمک متدهای مختلف موجود در این ساختار می‌توان به عملکردهای بسیاری دسترسی داشت. برای بررسی وجود یا عدم وجود کلید مشخصی در یک شی از کلاس Map می‌توان از متد containsKey()  در این کلاس استفاده کرد.

برنامه نویسی جاوا

جمع‌بندی

یکی از چالش‌های همیشگی برنامه‌نویسان در فرایند توسعه کار با نوع‌های داده‌‌ای مختلف و یافتن راهی بهینه برای دسترسی، جستجو و پیمایش این داده‌ها بوده است. بر همین اساس، اینترفیس Map در جاوا به عنوان ساختاری برای ذخیره‌سازی اطلاعات در قالب مجموعه‌ای از جفت‌های «کلید-مقدار» معرفی شد. اینترفیس Map با توجه ساختار «کلید-مقدار» خود دسترسی، بازیابی و پیمایش داده‌ها را بسیار آسان کرده است.

بر همین اساس در این مطلب از مجله فرادرس به این سوال پاسخ داده شده است که Map در جاوا چیست و چه کاربردی دارد. علاوه بر این، ضمن بررسی انواع Map در جاوا، نحوه پیاده‌سازی آن‌ها نیز مورد بررسی قرار گرفته است. همچنین، متدهای کاربردی کلاس Map در جاوا همراه با مثال معرفی شدند. در انتها نیز به متداول‌ترین سوالات این حوزه پاسخ داده شد.

بر اساس رای ۰ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
منابع:
SimplilearnHutSpot BlogGeeksforGeeks
نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *