English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
في هذا الدرس، سنتعلم من خلال الأمثلة عن فئة Java LinkedHashSet وما هي طرقها.
يقدم فئة LinkedHashSet في إطار Java Collections Framework وظائف جدول الهشاشة و قائمة مرتبطة.
إنها تحققواجهة Set.
تخزن عناصر LinkedHashSet بشكل مشابهمجموعة الهشاشة HashSetفي جدول الهشاشة.
لكن، تُحافظ مجموعة هشاشة المرتبطة على دبلية لكل عنصرها. تعريف الدبلية تعين ترتيب إدراج العناصر في جدول الهشاشة.
لإنشاء مجموعة هشاشة مرتبطة، يجب علينا أولاً استيراد حزمة java.util.LinkedHashSet.
بعد استيراد الحزمة، يمكنك إنشاء مجموعة هشاشة مرتبطة في Java.
//يحتوي على 8 قدرة و0.75 مؤشر تحميل LinkedHashSet LinkedHashSet<Integer> numbers = new LinkedHashSet<>(8, 0.75);
هنا، قمنا بإنشاء مجموعة هشاشة مرتبطة تُدعى numbers.
لاحظ، الجملة new LinkedHashSet<>(8, 0.75). هنا، الأول هوقدرة، الثانية هيمؤشر التحميل.
capacity - قدرتها هي 8. هذا يعني، يمكنها تخزين 8 عنصر.
loadFactor- مؤشر التحميل لهذه المجموعة الهشاشة هو 0.6. هذا يعني، بمجرد أن يتم تعبئة جدول الهشاشة بـ 60٪ من العناصر، سينتقل العناصر إلى جدول هشاشة جديد، حجمه ضعف حجم جدول الهشاشة الأصلي.
قدرة افتراضية ومؤشر التحميل
يمكن إنشاء مجموعة هشاشة مرتبطة دون تحديد قدرتها ومؤشر التحميل. على سبيل المثال،
//يحتوي على قدرة افتراضية ومؤشر التحميل المحدد مسبقًا LinkedHashSet LinkedHashSet<Integer> numbers1 = new LinkedHashSet<>();
افتراضيًا،
سعة مجموعة الهشاشة للقائمة المتصلة سيكون 16
عامل التحميل سيكون 0.75
هذا هو كيفية إنشاء مجموعة الهشاشة للقائمة المتصلة تحتوي على جميع عناصر المجموعات الأخرى.
import java.util.LinkedHashSet; import java.util.ArrayList; class Main { public static void main(String[] args) { //إنشاء قائمة الأعداد الصحيحة الثنائية ArrayList<Integer> evenNumbers = new ArrayList<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("ArrayList: " + evenNumbers); //إنشاء LinkedHashSet من ArrayList LinkedHashSet<Integer> numbers = new LinkedHashSet<>(evenNumbers); System.out.println("مجموعة الرابط الموجهة: " + numbers); } }
نتائج الإخراج
ArrayList: [2, 4] LinkedHashSet: [2, 4]
تقدم فئة LinkedHashSet طرقًا مختلفة للقيام بعمليات متنوعة على مجموعة الهشاشة للقائمة المتصلة.
add() - إدراج العنصر المحدد في مجموعة الهشاشة للقائمة المتصلة
addAll() - إدراج جميع العناصر في مجموعة الهشاشة للقائمة المتصلة
على سبيل المثال،
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> evenNumber = new LinkedHashSet<>(); //استخدام طريقة add() evenNumber.add(2); evenNumber.add(4); evenNumber.add(6); System.out.println("LinkedHashSet: " + evenNumber); LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); //استخدام طريقة addAll() numbers.addAll(evenNumber); numbers.add(5); System.out.println("New LinkedHashSet: " + numbers); } }
نتائج الإخراج
LinkedHashSet: [2, 4, 6] New LinkedHashSet: [2, 4, 6, 5]
للوصول إلى عناصر مجموعة الهشاشة للقائمة المتصلة، يمكننا استخدام طريقة iterator(). من أجل استخدام هذه الطريقة، يجب علينا استيراد حزمة java.util.Iterator. على سبيل المثال،
import java.util.LinkedHashSet; import java.util.Iterator; class Main { public static void main(String[] args) { LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("مجموعة الرابط الموجهة: " + numbers); //استدعاء طريقة iterator() Iterator<Integer> iterate = numbers.iterator(); System.out.print("استخدام LinkedHashSet مع Iterator: "); //استدعاء العنصر while(iterate.hasNext()) { System.out.print(iterate.next()); System.out.print(", "); } } }
نتائج الإخراج
مجموعة الرابط الموجهة: [2, 5, 6] استخدام LinkedHashSet مع Iterator: 2, 5, 6,
ملاحظات:
hasNext() تعود true إذا كانت هناك عناصر تالية في مجموعة الرابط الموجهة
next() تعود العنصر التالي في مجموعة الرابط الموجهة
remove() - حذف العنصر المحدد من مجموعة الرابط الموجهة
removeAll() - حذف جميع العناصر من مجموعة الرابط الموجهة
على سبيل المثال،
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(2); numbers.add(5); numbers.add(6); System.out.println("مجموعة الرابط الموجهة: " + numbers); //استخدام طريقة remove() boolean value1 = numbers.remove(5); System.out.println("هل تم حذف 5؟ " + value1); boolean value2 = numbers.removeAll(numbers); System.out.println("هل تم حذف جميع العناصر؟ " + value2); } }
نتائج الإخراج
مجموعة الرابط الموجهة: [2, 5, 6] هل تم حذف 5؟ true هل تم حذف جميع العناصر؟ true
يمكن استخدام جميع طرق فئة LinkedHashSet لتنفيذ أنواع مختلفة من عمليات مجموعة.
لإجراء تجمع بين مجموعتين، يمكننا استخدام طريقة addAll(). على سبيل المثال،
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("مجموعة الرابط الموجهة1: " + evenNumbers); LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(1); numbers.add(3); System.out.println("مجموعة الرابط الموجهة2: " + numbers); //اتحاد بين مجموعتين numbers.addAll(evenNumbers); System.out.println("مجموعة الاتحاد: " + numbers); } }
نتائج الإخراج
LinkedHashSet1: [2, 4] LinkedHashSet2: [1, 3] مجموعة الاتحاد: [1, 3, 2, 4]
لإجراء التقاء بين مجموعتين يمكننا استخدام الطريقة retainAll(). على سبيل المثال،
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet<Integer> evenNumbers = new LinkedHashSet<>(); evenNumbers.add(2); evenNumbers.add(4); System.out.println("LinkedHashSet2: " + evenNumbers); //مجموعة الت交汇 evenNumbers.retainAll(primeNumbers); System.out.println("مجموعة الت交汇: " + evenNumbers); } }
نتائج الإخراج
LinkedHashSet1: [2, 3] LinkedHashSet2: [2, 4] مجموعة الت交汇: [2]
لحساب الفرق بين مجموعتين يمكننا استخدام الطريقة removeAll(). على سبيل المثال،
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>(); primeNumbers.add(2); primeNumbers.add(3); primeNumbers.add(5); System.out.println("LinkedHashSet1: " + primeNumbers); LinkedHashSet<Integer> oddNumbers = new LinkedHashSet<>(); oddNumbers.add(1); oddNumbers.add(3); oddNumbers.add(5); System.out.println("LinkedHashSet2: " + oddNumbers); //مجموعة الفرق بين LinkedHashSet1 و LinkedHashSet2 primeNumbers.removeAll(oddNumbers); System.out.println("مجموعة الفرق: " + primeNumbers); } }
نتائج الإخراج
LinkedHashSet1: [2, 3, 5] LinkedHashSet2: [1, 3, 5] مجموعة الفرق: [2]
لتحقق من أن مجموعة هي مجموعة فرعية لمجموعة أخرى، يمكننا استخدام الطريقة containsAll(). على سبيل المثال،
import java.util.LinkedHashSet; class Main { public static void main(String[] args) { LinkedHashSet<Integer> numbers = new LinkedHashSet<>(); numbers.add(1); numbers.add(2); numbers.add(3); numbers.add(4); System.out.println("LinkedHashSet1: " + numbers); LinkedHashSet<Integer> primeNumbers = new LinkedHashSet<>(); primeNumbers.add(2); primeNumbers.add(3); System.out.println("LinkedHashSet2: " + primeNumbers); //تحقق من أن primeNumbers هي مجموعة فرعية ل numbers boolean result = numbers.containsAll(primeNumbers); System.out.println("هل LinkedHashSet2 هو مجموعة فرعية ل LinkedHashSet1؟ " + result); } }
نتائج الإخراج
LinkedHashSet1: [1, 2, 3, 4] LinkedHashSet2: [2, 3] هل LinkedHashSet2 هو مجموعة فرعية ل LinkedHashSet1؟ yes
الطريقة | وصف |
---|---|
clone() | إنشاء نسخة من LinkedHashSet |
contains() | البحث عن العنصر المحدد في LinkedHashSet وعدم العودة إلى النتيجة الحالية |
isEmpty() | تحقق من أن LinkedHashSet فارغ |
size() | استعادة حجم LinkedHashSet |
clear() | حذف جميع العناصر من LinkedHashSet |
LinkedHashSet و HashSet كلهما يمثلان واجهة Set. ولكن، هناك بعض الفروق بينهما.
LinkedHashSet maintains a linked list internally. Therefore, it maintains the insertion order of its elements.
LinkedHashSet requires more storage space than HashSet. This is because LinkedHashSet maintains a linked list internally.
LinkedHashSet is slower in performance than HashSet. This is because there is a linked list in LinkedHashSet.
The following are the main differences between LinkedHashSet and TreeSet:
TreeSet class implements the SortedSet interface. That is why the elements in the tree set are ordered. However, the LinkedHashSet class only maintains the insertion order of its elements.
TreeSet is usually slower than LinkedHashSet. This is because it must perform sorting operations every time an element is added to TreeSet.