المجموعة هي ببساطة مجموعة من الأشياء الفريدة. فريد يعني أنه لا يمكن لكائنين أن يكون لهما نفس القيمة (القيم). اعتمادًا على تنفيذ المجموعة، قد يتم طلبها أو لا يتم طلبها. تحتوي مجموعة Java، باعتبارها نوع بيانات مجردة (ADT)، على عدد قليل من العمليات الرئيسية (حيث يمثل T أي نوع بيانات، على سبيل المثال int، أو String، أو أي كائن فئة):
boolean add(T item)
: يُرجع صحيحًا إذا تمت إضافة العنصر بنجاح إلى المجموعة، ويُرجع خطأ إذا كان العنصر موجودًا بالفعل في المجموعة.boolean remove(T item)
: يُرجع صحيحًا إذا تمت إزالة العنصر بنجاح من المجموعة ويعيد الخطأ بخلاف ذلك (إذا لم يكن العنصر موجودًا في المجموعة).boolean contains(T item)
: يُرجع صحيحًا إذا كان العنصر موجودًا في المجموعة ويعيد الخطأ بخلاف ذلك.boolean isEmpty()
: يُرجع صحيحًا إذا كانت المجموعة فارغة، ويُرجع خطأً بخلاف ذلك.
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 و TreeSet
In 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 في JavaHashSet
: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 على فهم النظرية. فيما يلي مثال قصير لاستخدامTreeSet
s 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
هذا كل شئ! آمل أن يكون هذا ساعد 😊
GO TO FULL VERSION