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

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

تحكم Java في العملية

مجموعات Java Array

Java Object-Oriented (I)

Java Object-Oriented (II)

Java Object-Oriented (III)

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

قوائم Java List

Java Queue (فريق)

مجموعات Java Map

مجموعات Java Set

Java Input/Output (I/O)

Java Reader/Writer

مواضيع أخرى Java

Java LinkedHashSet

في هذا الدرس، سنتعلم من خلال الأمثلة عن فئة 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

تقدم فئة LinkedHashSet طرقًا مختلفة للقيام بعمليات متنوعة على مجموعة الهشاشة للقائمة المتصلة.

إدراج العنصر في 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]

زيارة عناصر مجموعة LinkedHashSet

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

حذف العنصر من مجموعة HashSet

  • 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

طرق أخرى ل LinkedHashSet

الطريقةوصف
clone()إنشاء نسخة من LinkedHashSet
contains()البحث عن العنصر المحدد في LinkedHashSet وعدم العودة إلى النتيجة الحالية
isEmpty()تحقق من أن LinkedHashSet فارغ
size()استعادة حجم LinkedHashSet
clear()حذف جميع العناصر من LinkedHashSet

الفرق بين LinkedHashSet و HashSet

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.

Differences between LinkedHashSet and TreeSet

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.

  • LinkedHashSet allows insertion of null values. However, we cannot insert null values into TreeSet.