CodeGym /مدونة جافا /Random-AR /مجموعة Java كواجهة
John Squirrels
مستوى
San Francisco

مجموعة Java كواجهة

نشرت في المجموعة
المجموعة هي ببساطة مجموعة من الأشياء الفريدة. فريد يعني أنه لا يمكن لكائنين أن يكون لهما نفس القيمة (القيم). اعتمادًا على تنفيذ المجموعة، قد يتم طلبها أو لا يتم طلبها. تحتوي مجموعة Java، باعتبارها نوع بيانات مجردة (ADT)، على عدد قليل من العمليات الرئيسية (حيث يمثل T أي نوع بيانات، على سبيل المثال int، أو String، أو أي كائن فئة): مجموعة Java كواجهة - 1
  • boolean add(T item): يُرجع صحيحًا إذا تمت إضافة العنصر بنجاح إلى المجموعة، ويُرجع خطأ إذا كان العنصر موجودًا بالفعل في المجموعة.
  • boolean remove(T item): يُرجع صحيحًا إذا تمت إزالة العنصر بنجاح من المجموعة ويعيد الخطأ بخلاف ذلك (إذا لم يكن العنصر موجودًا في المجموعة).
  • boolean contains(T item): يُرجع صحيحًا إذا كان العنصر موجودًا في المجموعة ويعيد الخطأ بخلاف ذلك.
  • boolean isEmpty(): يُرجع صحيحًا إذا كانت المجموعة فارغة، ويُرجع خطأً بخلاف ذلك.
تحتوي المجموعات الموجودة في Java على توقيعات وظيفية واضحة بذاتها (كما ينبغي). إذا قمت بإضافة عنصرين متطابقين إلى مجموعة، فلن يكون هناك سوى العنصر المضاف الأول فقط في المجموعة. سيتم تجاهل كافة المحاولات اللاحقة لإضافة نفس العنصر ما لم تتم إزالة العنصر أولاً. إحدى عمليات المجموعة الأكثر استخدامًا هي التحقق مما إذا كان العنصر موجودًا ضمن مجموعة معينة. توفر الوظيفة contains()وقت تشغيل رائعًا لهذا: التعقيد الزمني O(1) أو O(log n) اعتمادًا على ما إذا كان التنفيذ المستخدم هو a HashSetأو a TreeSet، على التوالي. إذن ما الذي يمكن استخدامه للمجموعة؟ حسنًا، إذا كنت بحاجة في أي وقت إلى تتبع العديد من الكائنات المميزة - مثل المعرفات أو الأسماء أو المعرفات الفريدة الأخرى - والتحقق بشكل متكرر من وجود عنصر ما في مثل هذه المجموعة، فمن المرجح أن تكون المجموعة خيارًا جيدًا. فيما يلي مثال لحالة استخدام لمجموعة: تخيل أن لديك قائمة بالكائنات التي Studentتمثل جميع الطلاب في فصل دراسي معين. قد يكون لكل منها Studentاسم فريد (سلسلة) ودرجة (int) لهذه الفئة. إذا كنت تريد الرجوع إلى قائمة بجميع طلاب A (الدرجة >= 90) بشكل متكرر، فسيكون من الممل تكرار هذه القائمة والتحقق من درجة كل طالب في كل مرة. بدلاً من ذلك، يمكنك استخدام سلسلة HashSetمن السلاسل التي تتتبع جميع الطلاب "أ" في الفصل، على هذا النحو:
  • في كل مرة يتم فيها تحديث درجات الطلاب، يمكنك ببساطة التحقق مما إذا كانت الدرجة الجديدة للطالب أكبر من أو تساوي 90 أم لا.
    • إذا كان الأمر كذلك، قم بإضافتهم إلى مجموعة الطلاب "أ" الذين يستخدمونadd()
      • إذا كانوا بالفعل طالبًا، فسيتم تجاهل هذه العملية ببساطة.
    • إذا لم يكن الأمر كذلك، فقم بإزالتها من مجموعة الطلاب الذين يستخدمونهاremove()
      • إذا لم يكونوا طلابًا ممتازين في هذه المرحلة، فسيتم تجاهل هذه العملية ببساطة.
مع مثل هذا النظام، سيكون لديك دائمًا مجموعة محدثة من جميع الطلاب "أ" في صفك. إذا كنت تريد التحقق مما إذا كان أداء جوني أبلسيد جيدًا في صفك، فيمكنك القيام بذلك بسهولة عن طريق الاتصال contains(“Johnny Appleseed”)بالمجموعة. بالطبع، هذا مجرد مثال واحد لحالة استخدام لمجموعة، ويمكن حل هذه المشكلة المحددة المتمثلة في تتبع الطلاب "أ" بطرق أخرى.

التطبيقات: HashSet في أمثلة Java وJava TreeSet

يأتي كل HashSetمن Java و TreeSetIn Java في ملف java.utils package. يمكنك استيرادها على هذا النحو:
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
أو
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
الفرق الرئيسي بين Java HashSetو Java TreeSetهو أنه TreeSetتم فرزه، بينما HashSetلم يتم فرزه. هذا هو السبب وراء TreeSetوجود تعقيد زمني O(log n) للعمليات الرئيسية، في حين أن HashSetلديه O(1) أو تعقيد زمني ثابت؛ ويجب TreeSetالحفاظ على النظام في جميع الأوقات. بالإضافة إلى عمليات مجموعة المفاتيح المذكورة سابقًا، تحتوي كل من HashSetو TreeSetفي Java على بعض الوظائف المفيدة الأخرى:
  • void clear(): مسح مجموعة كافة الكائنات.
  • int size(): إرجاع عدد الكائنات في المجموعة.
  • Object clone(): إرجاع نسخة ضحلة من المجموعة.
  • Iterator iterator(): يُرجع مُكرِّرًا إلى المجموعة، بدءًا من الكائن الأول.
يمكنك أن تتخيل العثور على استخدامات لهذه الوظائف في مثال "قائمة الطلاب "أ": يمكنك الاتصال size()إذا كنت تريد معرفة عدد الطلاب "أ" لديك، أو clear()إذا كنت تريد مسح القائمة في نهاية الفصل الدراسي. قد تستخدم clone()لإنشاء نسخة من قائمة الطلاب "أ" والاحتفاظ بها في وقت محدد، كما هو الحال أثناء تقارير منتصف الفصل الدراسي (بهذه الطريقة لا تظل النسخة المستنسخة محدثة مع النسخة الأصلية).

مثال جافا HashSet

فيما يلي مثال قصير عن استخدام s في Java HashSet:String
import java.util.HashSet;
class HashSetDemo {
    public static void main(String[] args)
    {
	  // create a HashSet of Strings
        HashSet<String> hs = new HashSet<String>();

        // Add elements using the add() method
        hs.add("Collin");
	  hs.add("Bob");
 	  hs.add("Abigail");

        // Duplicates will ignored; this statement is useless
        hs.add("Collin");


        System.out.println(hs);
	  System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
  System.out.println("Max is in the set (T/F): " + hs.contains("Max"));


    }
}
انتاج: --------

[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false

مثال على Java TreeSet

يمكن أن يساعدك مثال مجموعة Java على فهم النظرية. فيما يلي مثال قصير لاستخدام TreeSets Stringفي Java:
import java.util.TreeSet;
class TreeSetDemo {
    public static void main(String[] args)
    {
	  // create a TreeSet of Strings
        TreeSet<String> ts = new TreeSet<String>();

        // Add elements using the add() method.
        ts.add("Collin");
	  ts.add("Bob");
 	  ts.add("Abigail");

        // Duplicates will ignored; this statement is useless
        ts.add("Collin");

        // printing the set prints the names in alphabetical order!
        System.out.println(ts);

	  System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
  System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
  System.out.println("Size of the set: " + ts.size());
 	  ts.clear();
	  System.out.println("Size of the set after clear(): " + ts.size());


    }
}
انتاج: -------

[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
هذا كل شئ! آمل أن يكون هذا ساعد 😊
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION