CodeGym /مدونة جافا /Random-AR /كيفية تحديث قيمة مفتاح موجود في HashMap
John Squirrels
مستوى
San Francisco

كيفية تحديث قيمة مفتاح موجود في HashMap

نشرت في المجموعة
أنت تعلم أن هناك دائمًا مفتاحًا وقيمة في HashMap أو أي خريطة أخرى . يُسمى المفتاح بالمفتاح لسبب ما لأنه يمكنك الوصول إلى القيم عن طريق المفتاح. المفتاح فريد، لكن القيمة ليست كذلك. لذلك لا يمكنك الحصول على مفتاح حسب القيمة لأنه يمكن تكرار القيم. سنكتشف في هذه المقالة كيفية تحديث قيمة المفتاح الموجود في HashMap في Java. دعونا نتذكر بناء جملة جافا. يتم الإعلان عن HashMap في Java بالطريقة التالية:
HashMap<Key, Value> name
لنأخذ مثالا. لنفترض أن لدينا أربعة أصدقاء، وقمنا خصيصًا لهم بإنشاء خريطة HashMap وملأنا بأسمائهم. ومفاتيحهم عبارة عن أرقام صحيحة.
Map<Integer, String> names = new HashMap<Integer, String>();
       names.put(1, "Stan");
       names.put(2, "Kyle");
       names.put(3, "Kenny");
       names.put(4, "Cartman");
ملاحظة: يمكنك إنشاء خريطتك وملؤها بطرق مختلفة. على سبيل المثال، باستخدام كتلة التهيئة. ها هو:
Map<Integer, String> names = new HashMap<Integer, String>() {
           {
               put(1, "Stan");
               put(2, "Kyle");
               put(3, "Kenny");
               put(4, "Cartman");
           }
       };
أو باستخدام طريقة ومنشئ HashMap مع وسيطة الخريطة الأخرى . هذه الطريقة متاحة من الإصدار 9 والإصدارات الأحدث.
Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
كما قلنا من قبل، فإن مفاتيح HashMap لدينا هي أرقام صحيحة، والقيم تحتوي على بعض السلاسل، في حالتنا، أسماء الأحرف. حسنًا، لنفترض أن شيئًا سيئًا حدث لكيني (هؤلاء القراء الذين يعرفون سلسلة الرسوم المتحركة ساوث بارك، يعرفون بالتأكيد أن شيئًا سيئًا حدث لكيني كثيرًا). لذلك عندما يحدث ذلك، يتعين علينا إزالة كيني من هذه الشركة ( HashMap الخاصة بنا )، واستبداله بصديق آخر، على سبيل المثال، باسم Butters. من السهل جدًا القيام بذلك لأنها عملية ذات قيمة تحديث. ولدنا كيني لديه مفتاح == 3 . نحن بحاجة إلى تغيير قيمة المفتاح 3، حيث يقع كيني. يمكننا استخدام طريقة put() للقيام بذلك:
names.put(3, "Butters");
في هذه الحالة، إذا عرضنا خريطتنا على الشاشة، ستكون النتيجة كما يلي:
{1=Stan, 2=Kyle, 3=Butters, 4=Cartman}
ماذا لو كان كل شيء على ما يرام مع كيني ونريد إبقائه في الشركة، ولكن لدينا سبب لتحديث مفتاحه؟ لنفترض أنه لم يعد رقم ثلاثة بعد الآن، بل رقم خمسة. لنضع كيني في خريطتنا مرة أخرى باستخدام المفتاح 5 ونطبع النتيجة. يمكننا استخدام طريقة الوضع جيدًا. إليك الكود الكامل لهذا المثال:
import java.util.HashMap;

public class HashMapUpdKey {
   public static void main(String[] args) {
       Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));
       names.put(5, "Kenny");
       System.out.println(names);
   }
}
ربما تكون قد خمنت بالفعل النتيجة التي ستكون عليها:
{1=Stan, 2=Kyle, 3=Kenny, 4=Cartman, 5=Kenny}
هل هذا ما كنا نتوقعه؟ أصبح لدى Kenny الآن مفتاحان في HashMap الخاص بنا . حسنًا، بالمعنى الدقيق للكلمة، هذان نوعان مختلفان من كيني، أيًا كان ما نعنيه، نظرًا لأن الكائن الخاص بنا يتم تحديده بشكل فريد بواسطة المفتاح. إنه مثل جواز سفر الشخص، يجب أن يكون فريدًا. لذلك لا يمكنك فقط إعادة تسمية أو تحديث مفتاح hashmap بمجرد إضافته مباشرة. هذه العملية ببساطة غير متوفرة. ومع ذلك، يمكنك إجراء مناورة خادعة: قم بإدخال إدخال جديد باستخدام المفتاح الجديد وحذف الإدخال القديم. يمكن القيام بذلك باستخدام طريقة إزالة HashMap . لا يقوم Remove() بإزالة الارتباط فحسب، بل يقوم أيضًا بإرجاع القيمة المحذوفة (إذا كانت موجودة من قبل). دعونا نكمل مثالنا بهذه العملية:
//easy replacement example
import java.util.HashMap;

public class HashMapUpdKey {
   public static void main(String[] args) {
      Map<Integer, String> names = new HashMap<>(Map.of(1, "Stan", 2, "Kyle", 3, "Kenny", 4, "Cartman"));

       names.put(5, "Kenny"); //Adding “new” Kenny
       System.out.println(names.remove(3)); //Update value of the key: Removing “old” Kenny and print out deleted value

       System.out.println(names);
   }
}
الآن حصلنا أخيرًا على ما نحتاجه، وقمنا بتحديث المفتاح الذي يمكننا من خلاله العثور على كيني. هنا هو الإخراج:
كيني {1=ستان، 2=كايل، 4=كارتمان، 5=كيني}
بالطبع يمكننا تنفيذ عمليات إزالة كيني “القديم” وإضافة كيني جديد بأي ترتيب. هم مستقلون في الأساس. أو قم بتقصير الكود الخاص بك باستخدام سطر واحد فقط:
names.put(5, names.remove(3));
وستكون النتيجة هي نفسها بالتأكيد. لذا، فإن الطريقة الصحيحة الوحيدة لتغيير المفتاح في Java HashMap هي حذف الإدخال وإدراج نفس القيمة بمفتاح جديد. يمكنك القيام بذلك بطريقة مختلفة ولكنها ستكون نفس القصة تقريبًا فيما يتعلق بإضافة عنصر وإزالته.
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION