English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدرس، سنتعلم عن طريق الأمثلة Class EnumMap وعملياته
يقدم Class EnumMap من إطار العمل Java Collections implementations للعناصر الترميزية
في EnumMap، يتم استخدام العناصر الترميزية كـالمفتاح. إنها تنفذواجهة Map.
قبل تعلم EnumMap، تأكد من أنك تعرفJava إnum.
لإنشاء خريطة الترميز، يجب علينا أولاً استيراد حزمة java.util.EnumMap. بعد استيراد الحزمة، يمكننا استخدام Java لإنشاء خريطة الترميز
enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);
في الأمثلة السابقة، قمنا بإنشاء خريطة الترميز المسمى sizes
هنا،
Size - الترميز الم映射 إلى القيمةالمفتاح
Integer- الخريطة الترميزية المحددة المرتبطة بالمفتاحالقيمة
يقدم Class EnumMap بعض الأساليب التي تسمح لنا بتنفيذ عناصر خريطة الترميز المختلفة
put() - ي插入 المفتاح/القيمة المحددة (المدخل) إلى خريطة الحسابات
putAll() - ي插入 جميع المدخلات المحددة في الخريطة إلى هذه الخريطة
مثلاً،
import java.util.EnumMap; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // إنشاء EnumMap جديد لقائمة المفردات size EnumMap<Size, Integer> sizes1 = new EnumMap<>(Size.class); // استخدام طريقة put() sizes1.put(Size.SMALL, 28); sizes1.put(Size.MEDIUM, 32); System.out.println("EnumMap1: " + sizes1); EnumMap<Size, Integer> sizes2 = new EnumMap<>(Size.class); // استخدام طريقة putAll() sizes2.putAll(sizes1); sizes2.put(Size.LARGE, 36); System.out.println("EnumMap2: " + sizes2); } }
نتائج الإخراج
EnumMap1: {الصغير=28, المتوسط=32} EnumMap2: {الصغير=28, المتوسط=32, الكبير=36}
في المثال السابق، قمنا باستخدام طريقة putAll() لإدراج جميع العناصر من خريطة size1 المفردة إلى خريطة size2 المفردة.
يمكنك أيضًا استخدام putAll() لإدراج عناصر من خريطة أخرى (مثل HashMap،TreeMap وما إلى ذلك) إلى خريطة المفردات المفردة. ولكن يجب أن تكون جميع الخرائط لها نفس نوع المفردات.
1. استخدام entrySet()،keySet() وvalues()
entrySet() - عودة مجموعة جميع المفاتيح/القيم (المدخلات) الموجودة في الم映射 المفرداتي
keySet() - عودة مجموعة المفاتيح الموجودة في الم映射 المفرداتي
values() - عودة مجموعة القيم الموجودة في الم映射 المفرداتي
مثلاً،
import java.util.EnumMap; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // إنشاء EnumMap للاشارة Size EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // استخدام طريقة entrySet() System.out.println("م映射: " + sizes.entrySet()); // استخدام طريقة keySet() System.out.println("المفاتيح: " + sizes.keySet()); // استخدام طريقة values() System.out.println("القيم: " + sizes.values()); } }
نتائج الإخراج
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} م映射: [الصغير=28, المتوسط=32, الكبير=36, كبير جداً=40] المفاتيح: [SMALL, MEDIUM, LARGE, EXTRALARGE] القيم: [28, 32, 36, 40]
2. استخدام get()
ي�回 عامل get() القيمة المرتبطة بالمفتاح المحدد. إذا لم يتم العثور على المفتاح المحدد، فيتم عودة null.
مثلاً،
import java.util.EnumMap; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // إنشاء EnumMap للاشارة Size EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // استخدام get() int value = sizes.get(Size.MEDIUM); System.out.println("قيمة MEDIUM: " + value); } }
نتائج الإخراج
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} قيمة MEDIUM: 32
remove(key) - يعود ويتم حذف العنصر المرتبط بالمفتاح المحدد
remove(key, value) - يتم حذف العنصر من الخريطة فقط إذا كان المفتاح المحدد مرتبط بالقيمة المحددة ويعود قيمة منطقية
مثلاً،
import java.util.EnumMap; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // إنشاء EnumMap للاشارة Size EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // استخدام remove() int value = sizes.remove(Size.MEDIUM); System.out.println("القيمة المزالة: " + value); boolean result = sizes.remove(Size.SMALL, 28); System.out.println("هل تم حذف الإدخال {SMALL=28}؟ " + result); System.out.println("خريطة EnumMap المعدلة: " + sizes); } }
نتائج الإخراج
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} القيمة المزالة: 32 الإدخال {SMALL=28} هل تم حذفه؟ True خريطة EnumMap المعدلة: {LARGE=36, EXTRALARGE=40}
replace(key, value) - يتم استبدال القيمة المرتبطة بالمفتاح key بالقيمة value
replace(key, old, new) - يتم استبدال old بالقيمة new فقط إذا كانت القيمة old مرتبطة بالملف المحدد key
replaceAll(function) - باستخدام نتائج الدالة المحددة لتحل محل كل قيمة في الخريطة
import java.util.EnumMap; class Main { enum Size { SMALL, MEDIUM, LARGE, EXTRALARGE } public static void main(String[] args) { // إنشاء EnumMap للاشارة Size EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class); sizes.put(Size.SMALL, 28); sizes.put(Size.MEDIUM, 32); sizes.put(Size.LARGE, 36); sizes.put(Size.EXTRALARGE, 40); System.out.println("EnumMap: " + sizes); // استخدام طريقة replace() sizes.replace(Size.MEDIUM, 30); sizes.replace(Size.LARGE, 36, 34); System.out.println("استخدام طريقة replace(): " + sizes); // استخدام طريقة replaceAll() sizes.replaceAll((key, oldValue) -> oldValue + 3); System.out.println("استخدام طريقة replaceAll(): " + sizes); } }
نتائج الإخراج
EnumMap: {SMALL=28, MEDIUM=32, LARGE=36, EXTRALARGE=40} استخدام طريقة replace(): {SMALL=28, MEDIUM=30, LARGE=34, EXTRALARGE=40} استخدام طريقة replaceAll(): {SMALL=31, MEDIUM=33, LARGE=37, EXTRALARGE=43}
في البرنامج أعلاه، يرجى ملاحظة الجمل التالية
sizes.replaceAll((key, oldValue) -> oldValue + 3);
في هذا السياق، يقوم هذا الطريقة بزيارة جميع المدخلات في المفتاح. ثم، يقوم بتبديل جميع القيم إلىعبارات lambdaالقيم الجديدة التي يقدمها
الطريقة | وصف |
---|---|
clone() | إنشاء نسخة من EnumMap |
containsKey() | البحث عن المفتاح المحدد من قبل EnumMap وعدة نتيجة بولية |
containsValue() | البحث عن القيمة المحددة من قبل EnumMap وعدة نتيجة بولية |
size() | الناتج الحجم EnumMap |
clear() | حذف جميع المدخلات EnumMap |
EnumSetوكلتا فئة EnumSet وفئة EnumMap تقدم بنية بيانات لقيم الإnum. ومع ذلك، هناك بعض الاختلافات الرئيسية بينهما.
تمثل مجموعات Enum داخليًا بترتيب بتات، بينما تمثل خريطة EnumMap داخليًا بمكوناتها الأساسية.
تُنشأ مجموعات Enum باستخدام طرق مسبقة التحديد مثل allOf()، noneOf()، of() وما إلى ذلك. ولكن، يتم إنشاء خريطة EnumMap باستخدام مكونها الأساسي.
فئة EnumMap قد نفذت واجهات Cloneable وSerializable.
Cloneable نسخواجهة
هو يسمح للفئة EnumMap بالنسخ استنساخ النسخ من الفئة.
واجهةSerializable قابلة للتمثيل التسلسلي
عندما تحتاج إلى نقل جسم Java عبر الشبكة، يجب تحويل الجسم إلى بيانات أو بتات. هذا لأن جسم Java لا يمكنه النقل عبر الشبكة.
واجهةSerializable يسمح للفئات بالتمثيل التسلسلي. هذا يعني أنSerializable يمكن أن يتحول إلى بيانات أو بتات الفئة المطبقة.