English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

تعليميات Java الأساسية

Java Flow Control

Java Arrays

Java Object-Oriented (I)

Java Object-Oriented (II)

Java Object-Oriented (III)

معالجة الاستثناءات Java

Java List

Java Queue (Queue)

Java Map Collections

Java Set Collections

Java Input/Output (I/O)

Java Reader/Writer

مواضيع أخرى Java

Java EnumMap

في هذا الدرس، سنتعلم عن طريق الأمثلة Class EnumMap وعملياته

يقدم Class EnumMap من إطار العمل Java Collections implementations للعناصر الترميزية

في EnumMap، يتم استخدام العناصر الترميزية كـالمفتاح. إنها تنفذواجهة Map.

قبل تعلم EnumMap، تأكد من أنك تعرفJava إnum.

إنشاء EnumMap

لإنشاء خريطة الترميز، يجب علينا أولاً استيراد حزمة java.util.EnumMap. بعد استيراد الحزمة، يمكننا استخدام Java لإنشاء خريطة الترميز

enum Size {
    SMALL, MEDIUM, LARGE, EXTRALARGE
}
EnumMap<Size, Integer> sizes = new EnumMap<>(Size.class);

في الأمثلة السابقة، قمنا بإنشاء خريطة الترميز المسمى sizes

هنا،

  • Size - الترميز الم映射 إلى القيمةالمفتاح

  • Integer- الخريطة الترميزية المحددة المرتبطة بالمفتاحالقيمة

أساليب EnumMap

يقدم Class EnumMap بعض الأساليب التي تسمح لنا بتنفيذ عناصر خريطة الترميز المختلفة

يُدرج العنصر في 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 وما إلى ذلك) إلى خريطة المفردات المفردة. ولكن يجب أن تكون جميع الخرائط لها نفس نوع المفردات.

زيارة عناصر EnumMap

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

حذف عناصر EnumMap

  • 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}

استبدال عناصر EnumMap

  • 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 و EnumMap

EnumSetوكلتا فئة EnumSet وفئة EnumMap تقدم بنية بيانات لقيم الإnum. ومع ذلك، هناك بعض الاختلافات الرئيسية بينهما.

  • تمثل مجموعات Enum داخليًا بترتيب بتات، بينما تمثل خريطة EnumMap داخليًا بمكوناتها الأساسية.

  • تُنشأ مجموعات Enum باستخدام طرق مسبقة التحديد مثل allOf()، noneOf()، of() وما إلى ذلك. ولكن، يتم إنشاء خريطة EnumMap باستخدام مكونها الأساسي.

واجهات Cloneable وSerializable

فئة EnumMap قد نفذت واجهات Cloneable وSerializable.

Cloneable نسخواجهة

هو يسمح للفئة EnumMap بالنسخ استنساخ النسخ من الفئة.

واجهةSerializable قابلة للتمثيل التسلسلي

عندما تحتاج إلى نقل جسم Java عبر الشبكة، يجب تحويل الجسم إلى بيانات أو بتات. هذا لأن جسم Java لا يمكنه النقل عبر الشبكة.

واجهةSerializable يسمح للفئات بالتمثيل التسلسلي. هذا يعني أنSerializable يمكن أن يتحول إلى بيانات أو بتات الفئة المطبقة.