Map هو بنية بيانات لتخزين أزواج المفتاح والقيمة. وهو شبيه بالقواميس في لغات البرمجة الأخرى. تعرّف واجهة Map العمليات التي يمكن إجراؤها على الخريطة.
تحتوي Java على عدد من تطبيقات Map المختلفة. ويُعد HashMap من أكثرها استخدامًا.
// Make an instance
Map<String, Integer> fruitPrices = new HashMap<>();
أضف مُدخلات إلى الخريطة باستخدام put.
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
استخدم 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 للحصول على المفاتيح أو القيم في الخريطة على هيئة Set أو collection على التوالي.
fruitPrices.keySet(); // Returns "apple" and "pear" in a set
fruitPrices.values(); // Returns 100 and 80, in a Collection
في هذا التمرين ستكتب كودًا لإدارة قاموس لأكواد الاتصال الدولية باستخدام Map.
يتيح القاموس البحث عن اسم بلد ما (قيمة الخريطة، بوصفها String) من خلال كود الاتصال الدولي (مفتاح الخريطة، بوصفه Integer)،
نفّذ الطريقة getCodes التي لا تأخذ أي معاملات وتُرجع خريطة تربط أكواد الاتصال بالبلدان الموجودة حاليًا في القاموس.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.getCodes();
// => empty map
يجب تعبئة القاموس.
نفّذ الطريقة setDialingCode التي تأخذ كود اتصال والبلد المقابل له وتضيف كود الاتصال والبلد.
إذا كان كود الاتصال موجودًا بالفعل في الخريطة، فحدّث الخريطة بالكود والبلد المقدمين.
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، لا تفعل شيئًا إذا كان كود الاتصال أو البلد موجودًا بالفعل في الخريطة.
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 التي تأخذ بلدًا وتُرجع كود اتصال البلد.
أرجِع null إذا كان البلد غير موجود في الخريطة.
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(44, "UK");
dialingCodes.findDialingCode("UK");
// => 44
dialingCodes.findDialingCode("Unlisted");
// => null
الآن بعد أن عرفنا كود الاتصال الذي يحتاج إلى تصحيح، لننتقل إلى تحديث الكود.
نفّذ الطريقة updateCountryDialingCode التي تأخذ كود الاتصال الجديد للبلد واسم البلد وتُجري التحديث وفقًا لذلك.
لا تفعل شيئًا إذا كان البلد غير موجود في الخريطة (فهذه الطريقة غرضها الوحيد المساعدة في تصحيح الأخطاء).
DialingCodes dialingCodes = new DialingCodes();
dialingCodes.addDialingCode(88, "Japan");
// => { 88 => "Japan" }
dialingCodes.updateCountryDialingCode(81, "Japan");
// => { 81 => "Japan" }
dialingCodes.updateCountryDialingCode(32, "Mars");
// => { 81 => "Japan"}
سجّل في Exercism لتتعلّم وتتقن Java عبر 26 مفهومًا158 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.