مجموعة Java هي مجموعة من العناصر (أو الكائنات) التي لا تحتوي على عناصر مكررة. مجموعة Java هي واجهة تمتد من واجهة المجموعات. بخلاف القائمة، مجموعة Java ليست مجموعة مرتبة، عناصرها ليست لها ترتيب معين. مجموعة Java لا توفر السيطرة على المكان الذي يمكنك فيه إدراج عنصر. لا يمكنك الوصول إلى العناصر بواسطة فهرسها وأيضا البحث عن العناصر في القائمة.
مجموعة Java
في هذا القسم، سنناقش بعض النقاط المهمة حول مجموعة Java:
- واجهة مجموعة Java هي عضو في إطار عمل مجموعات Java.
- بخلاف القائمة، المجموعة لا تسمح لك بإضافة عناصر مكررة.
- تسمح لك المجموعة بإضافة عنصر خالي واحد فقط كحد أقصى.
- حصلت واجهة المجموعة على طريقة افتراضية واحدة في Java 8: spliterator.
- بخلاف القائمة والمصفوفات، المجموعة لا تدعم الفهارس أو المواقع لعناصرها.
- تدعم المجموعة الأصناف العامة ويجب أن نستخدمها كلما كان ذلك ممكنا. سيتجنب استخدام الأصناف العامة مع المجموعة ClassCastException في وقت التشغيل.
- يمكننا استخدام تنفيذات واجهة المجموعة للحفاظ على العناصر الفريدة.
رسم تخطيط فئة مجموعة جافا
تمتد واجهة مجموعة جافا إلى واجهة التجميع. واجهة التجميع تمتد إلى واجهة Iterable. بعض فئات تنفيذ المجموعة المستخدمة بشكل متكرر هي HashSet، LinkedHashSet، TreeSet، CopyOnWriteArraySet و ConcurrentSkipListSet. يوفر AbstractSet تنفيذًا هيكليًا لواجهة المجموعة لتقليل الجهد في تنفيذ المجموعة.
طرق مجموعة جافا
في هذا القسم، سنناقش بعض طرق مجموعة جافا المفيدة:
- int size(): للحصول على عدد العناصر في المجموعة.
- boolean isEmpty(): للتحقق مما إذا كانت المجموعة فارغة أم لا.
- boolean contains(Object o): يُرجع true إذا كانت هذه المجموعة تحتوي على العنصر المحدد.
- Iterator iterator(): يُرجع مكررًا على العناصر في هذه المجموعة. يتم إرجاع العناصر بأي ترتيب معين.
- Object[] toArray(): يُرجع مصفوفة تحتوي على جميع العناصر في هذه المجموعة. إذا قدمت هذه المجموعة أي ضمانات بشأن ترتيب العناصر التي يتم إرجاعها بواسطة مكررها، يجب أن تُرجع هذه الطريقة العناصر بنفس الترتيب.
- boolean add(E e): يضيف العنصر المحدد إلى هذه المجموعة إذا لم يكن موجودًا بالفعل (العملية اختيارية).
- boolean remove(Object o): يزيل العنصر المحدد من هذه المجموعة إذا كان موجودًا (العملية اختيارية).
- boolean removeAll(Collection c): يزيل من هذه المجموعة جميع العناصر التي تحتوي عليها المجموعة المحددة (العملية اختيارية).
- boolean retainAll(Collection c): يحتفظ فقط بالعناصر في هذه المجموعة التي تحتوي عليها المجموعة المحددة (العملية اختيارية).
- void clear(): يزيل جميع العناصر من المجموعة.
- Iterator iterator(): يعيد محددًا على العناصر في هذه المجموعة.
Java Array to Set
على عكس القائمة، لا يمكننا تحويل مجموعة جافا إلى مصفوفة مباشرة لأنها غير مُنفَذة باستخدام مصفوفة. لذلك لا يمكننا استخدام فئة Arrays للحصول على عرض للمصفوفة كمجموعة. يمكننا اتباع نهج آخر. يمكننا تحويل مصفوفة إلى قائمة باستخدام طريقة Arrays.asList() ، ثم استخدامها لإنشاء مجموعة. باستخدام هذا النهج، يمكننا تحويل مصفوفة جافا إلى مجموعة بطريقتين. دعنا نناقشهما واحدة تلو الأخرى باستخدام مثال بسيط. النهج الأول في هذا النهج، أولاً نحتاج إلى إنشاء قائمة باستخدام المصفوفة المعطاة واستخدامها لإنشاء مجموعة كما هو موضح أدناه.
import java.util.*;
public class ArrayToSet {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
Set<String> vowelsSet = new HashSet>(Arrays.asList(vowels));
System.out.println(vowelsSet);
/**
* Unlike List, Set is NOt backed by array,
* so we can do structural modification without any issues.
*/
vowelsSet.remove("e");
System.out.println(vowelsSet);
vowelsSet.clear();
System.out.println(vowelsSet);
}
}
النهج ٢ في هذا النهج، لا نستخدم قائمة وسيطة لإنشاء مجموعة من مصفوفة. ننشئ أولاً HashSet فارغة، ثم نستخدم Collections.addAll() لنسخ عناصر المصفوفة إلى المجموعة المعطاة كما هو موضح أدناه.
import java.util.*;
public class ArrayToSet2 {
public static void main(String[] args) {
String[] vowels = {"a","e","i","o","u"};
Set<String> vowelsSet = new HashSet<>();
Collections.addAll(vowelsSet, vowels);
System.out.println(vowelsSet);
/**
* Unlike List, Set is NOt backed by array,
* so we can do structural modification without any issues.
*/
vowelsSet.remove("e");
System.out.println(vowelsSet);
vowelsSet.clear();
System.out.println(vowelsSet);
}
}
الناتج:- عند تشغيل البرامجين أعلاه، سنحصل على نفس الناتج كما هو موضح أدناه.
[a, e, u, i, o]
[a, u, i, o]
[]
تحويل مجموعة Java إلى مصفوفة
في هذا القسم، سنكتب برنامجًا لتحويل مجموعة من السلاسل إلى مصفوفة سلاسل باستخدام طريقة Set.toArray() كما هو موضح أدناه.
import java.util.*;
public class SetToArray {
public static void main(String[] args) {
Set();
// أضف مثال
vowelsSet.add("a");
vowelsSet.add("e");
vowelsSet.add("i");
vowelsSet.add("o");
vowelsSet.add("u");
// تحويل المجموعة إلى مصفوفة
String strArray[] = vowelsSet.toArray(new String[vowelsSet.size()]);
System.out.println(Arrays.toString(strArray));
}
}
الناتج:- عند تشغيل البرنامج أعلاه، سنحصل على الناتج التالي كما هو موضح أدناه.
[a, e, u, i, o]
فرز مجموعة Java
كما نعلم، المجموعة (HashSet) لا تدعم فرز العناصر مباشرة. فهي تخزن عناصرها وتعرضها بترتيب عشوائي. ومع ذلك، لدينا بعض النهج لفرز عناصرها كما هو موضح أدناه:
import java.util.*;
public class SetSortingExample {
public static void main(String[] args) {
Set<Integer> intsSet = new HashSet<>();
Random random = new Random();
for (int i = 0; i {return (o2-o1);});
System.out.println("Reverse Sorting: " + intsList2);
// Approach-3
Set<Integer> sortedSet = new TreeSet<>(intsSet);
System.out.println("Sorted Set: " + sortedSet);
}
}
الناتج:- عند تشغيل البرنامج أعلاه، سنرى الناتج التالي.
[560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Natural Sorting: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]
Before Sorting: [560, 864, 176, 657, 135, 103, 40, 123, 555, 589]
Reverse Sorting: [864, 657, 589, 560, 555, 176, 135, 123, 103, 40]
Sorted Set: [40, 103, 123, 135, 176, 555, 560, 589, 657, 864]
عمليات مجموعة جافا الشائعة
أكثر العمليات شيوعًا التي يتم تنفيذها على مجموعة جافا هي إضافة، إضافة الكل، تفريغ، الحجم، إلخ. فيما يلي مثال بسيط لمجموعة جافا يظهر كيفية استخدام الطرق الشائعة.
import java.util.*;
public class SetCommonOperations
{
public static void main(String args[])
{
Set vowels= new HashSet<>();
//مثال على الإضافة
vowels.add("A");
vowels.add("E");
vowels.add("I");
//لا يمكننا إدراج العناصر بناءً على الفهرس في مجموعة
System.out.println(vowels);
Set set = new HashSet<>();
set.add("O");
set.add("U");
//إلحاق عناصر المجموعة بالحروف
vowels.addAll(set);
System.out.println(vowels);
//مثال على تفريغ لتفريغ المجموعة
set.clear();
//مثال على الحجم
System.out.println("letters set size = " + vowels.size());
vowels.clear();
vowels.add("E"); vowels.add("E");vowels.add("I"); vowels.add("O");
System.out.println("Given set contains E element or not? = " + vowels.contains("E"));
}
}
الناتج:-
[A, E, I]
[A, E, U, I, O]
letters set size = 5
Given set contains E element or not? = true
محدد مجموعة جافا
فيما يلي مثال بسيط يوضح كيفية تكرار مجموعة جافا.
import java.util.*;
public class SetIteratorExample
{
public static void main(String[] args)
{
Set set = new HashSet<>();
for(int i=0; i<5; i++)
set.add(i);
Iterator iterator = set.iterator();
//تكرار بسيط
while(iterator.hasNext()){
int i = (int) iterator.next();
System.out.print(i + ", ");
}
System.out.println("\n" + set);
//تعديل المجموعة باستخدام المكرر
iterator = set.iterator();
while(iterator.hasNext()){
int x = (int) iterator.next();
if(x%2 ==0) iterator.remove();
}
System.out.println(set);
//تغيير هيكل المجموعة أثناء التكرار
iterator = set.iterator();
while(iterator.hasNext()){
//استثناء التعديل المتزامن هنا
int x = (int) iterator.next();
if(x==1) set.add(10);
}
}
}
تحويل مجموعة جافا إلى تيار
فيما يلي مثال بسيط يوضح كيفية تحويل مجموعة جافا إلى تيار وتنفيذ بعض العمليات حسب احتياجاتنا.
import java.util.*;
public class SetToStream {
public static void main(String[] args) {
Set vowelsSet = new HashSet<>();
//مثال على الإضافة
vowelsSet.add("a");
vowelsSet.add("e");
vowelsSet.add("i");
vowelsSet.add("o");
vowelsSet.add("u");
vowelsSet.stream().forEach(System.out::println);
}
}
الناتج:-
a
e
u
i
o
مجموعة Java SE 9
في إصدار Java SE 9 ، تعتزم Oracle Corp إضافة بعض الأساليب المفيدة إلى واجهة Set. من الأفضل فهمها مع بعض الأمثلة البسيطة والمفيدة. يرجى قراءة البرنامج التعليمي الخاص بي في “Java SE 9: Set Factory Methods” لتعلمها. هذا كل شيء في ملخص سريع عن مجموعة في جافا. آمل أن تساعدك أمثلة Java Set هذه في البدء في برمجة مجموعة. شكرا لقراءة برامجي التعليمية. يرجى ترك تعليق إذا أعجبتك برامجي التعليمية أو كانت لديك أية مشاكل أو اقتراحات أو أخطاء نوعية.
Source:
https://www.digitalocean.com/community/tutorials/java-set