Map یک ساختار داده برای نگهداری جفتهای کلید-مقدار است. این ساختار داده شبیه دیکشنریها در زبانهای برنامهنویسی دیگر است. اینترفیس Map عملیات روی یک Map را تعریف میکند.
Java چندین پیادهسازی مختلف Map دارد. HashMap یکی از پرکاربردترین آنهاست.
// Make an instance
Map<String, Integer> fruitPrices = new HashMap<>();
با استفاده از put عضوهایی به Map اضافه کنید.
fruitPrices.put("apple", 100);
fruitPrices.put("pear", 80);
// => { "apple" => 100, "pear" => 80 }
هر کلید فقط میتواند با یک مقدار مرتبط باشد.
فراخوانی put با همان کلید، مقدار آن کلید را بهروزرسانی میکند.
fruitPrices.put("pear", 40);
// => { "apple" => 100, "pear" => 40 }
برای گرفتن مقدار یک کلید از get استفاده کنید.
fruitPrices.get("apple"); // => 100
برای اینکه ببینید Map کلید خاصی را در خود دارد یا نه، از containsKey استفاده کنید.
fruitPrices.containsKey("apple"); // => true
fruitPrices.containsKey("orange"); // => false
با remove عضوها را حذف کنید.
fruitPrices.put("plum", 90); // Add plum to map
fruitPrices.remove("plum"); // Removes plum from map
متد size تعداد عضوها را برمیگرداند.
fruitPrices.size(); // Returns 2
با استفاده از متدهای keySet یا values میتوانید بهترتیب کلیدها یا مقادیر یک Map را بهصورت یک Set یا یک Collection به دست آورید.
fruitPrices.keySet(); // Returns "apple" and "pear" in a set
fruitPrices.values(); // Returns 100 and 80, in a Collection
در این تمرین، کدی مینویسید که یک دیکشنری از کدهای تلفن بینالمللی را با استفاده از یک Map مدیریت میکند.
این دیکشنری به شما امکان میدهد اسم یک کشور (مقدار Map، از نوع String) را با کد تلفن بینالمللی (کلید Map، از نوع Integer) جستوجو کنید.
Map
متد getCodes را پیادهسازی کنید. این متد هیچ پارامتری نمیگیرد و یک Map را برمیگرداند که کدهای تلفن موجود در دیکشنری را به کشورها نگاشت میکند.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.getCodes();
// => empty map
دیکشنری باید پر شود.
متد setDialingCode را پیادهسازی کنید که یک کد تلفن و کشور متناظر با آن را میگیرد و آن کد تلفن و کشور را اضافه میکند.
اگر کد تلفن از قبل در Map باشد، Map را با کد و کشور دادهشده بهروزرسانی کنید.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(679, "Unknown");
// => { 679 => "Unknown" }
dialingCodes.setDialingCode(679, "Fiji");
// => { 679 => "Fiji" }
متد getCountry را پیادهسازی کنید که یک کد تلفن میگیرد و اسم کشوری را که با آن کد تلفن متناظر است برمیگرداند.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.setDialingCode(55, "Brazil");
dialingCodes.getCountry(55);
// => "Brazil"
هنگام افزودن یک کد تلفن، باید دقت کرد که یک کد یا کشور دوبار اضافه نشود.
در مواردی که این اتفاق میافتد، میتوان فرض کرد که اولین ورودی، ورودی درست است.
متد addNewDialingCode را پیادهسازی کنید که یک ورودی برای کد تلفن و کشور دادهشده اضافه میکند.
اما برخلاف setDialingCode، اگر کد تلفن یا کشور از قبل در Map وجود داشته باشد، هیچ کاری انجام نمیدهد.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addNewDialingCode(32, "Belgium");
dialingCodes.addNewDialingCode(379, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }
dialingCodes.addNewDialingCode(32, "Other");
dialingCodes.addNewDialingCode(39, "Vatican City");
// => { 32 => "Belgium", 379 => "Vatican City" }
بهندرت پیش میآید، اما امکان اشتباه وجود دارد.
برای اصلاح اشتباه، باید بدانیم که کشور در حال حاضر به چه کد تلفنی نگاشت شده است.
برای اینکه بفهمیم کدام کد تلفن باید اصلاح شود، متد findDialingCode را پیادهسازی کنید که یک کشور میگیرد و کد تلفن آن کشور را برمیگرداند.
اگر کشور در Map نباشد، null را برگردانید.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(44, "UK");
dialingCodes.findDialingCode("UK");
// => 44
dialingCodes.findDialingCode("Unlisted");
// => null
حالا که میدانیم کدام کد تلفن باید اصلاح شود، کد را بهروزرسانی میکنیم.
متد updateCountryDialingCode را پیادهسازی کنید که کد تلفن جدید کشور و اسم آن کشور را میگیرد و بر همان اساس بهروزرسانی میکند.
اگر کشور در Map نباشد، هیچ کاری انجام ندهید (چون این متد فقط برای کمک به اصلاح اشتباهها در نظر گرفته شده است).
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(88, "Japan");
// => { 88 => "Japan" }
dialingCodes.updateCountryDialingCode(81, "Japan");
// => { 81 => "Japan" }
dialingCodes.updateCountryDialingCode(32, "Mars");
// => { 81 => "Japan"}