Java الكلاس HashSet في جافا

مقدمة

الكلاس HashSet يستخدم لتخزين عناصر متتالية, دون مراعاة أي دقة في ترتيب هذه العناصر, كما أنه يسمح بتخزين القيمة null.
لكنه لا يسمح بتخزين أكثر من عنصر عندهم نفس القيمة, فتجد كل عنصر فيه يملك قيمة مختلفة.

السبب الوحيد الذي قد يجعلك تستخدم هذا الكلاس هو سرعته العالية في التخزين مقارنة مع باقي الكلاسات الموجودة في المجموعة Set.

هنا لا يمكنك الوصول لعنصر محدد من عناصر كائن الـ HashSet لأن العناصر هنا لا تملك أرقام Index. لذلك لا يحتوي على أي دالة من دوال get().
إذاً هنا للوصول إلى عنصر ما عليك المرور على جميع العناصر الأخرى الموجودة في كائن الـ HashSet.


سبب سرعة الأداء

كل عنصر يضاف في كائن الـ HashSet يملك hashcode خاص فيه في الذاكرة.
عندما تحاول على سبيل المثال تخزين عناصر كائن نوعه HashSet في كائن نوعه Iterator, سيتم الوصول لعناصر كائن الـ HashSet مباشرةً من خلال الـ Hash Code الخاص لكل عنصر.


بناؤه

public class HashSet<E>
extends AbstractSet<E>
implements Set<E>, Cloneable, Serializable
	

إذاً الكلاس HashSet يرث من الكلاس AbstractSet, و يطبق الإنترفيسات Set - Cloneable - Serializable.

كونستركتورات الكلاس HashSet

الجدول التالي يحتوي على جميع الكونستركتورات الموجودين في الكلاس HashSet.

الكونستركتور مع تعريفه
public HashSet() هذا الكونستركتور الإفتراضي في الكلاس HashSet, يستخدم لإنشاء كائن نوعه HashSet ليس له حجم محدد.
public HashSet(int initialCapacity) يستخدم هذا الكونستركتور لتحديد حجم كائن الـ HashSet الأولي.
الرقم الذي نضعه كـ Argument في هذا الكونستركتور يحدد عدد عناصر كائن الـ HashSet الذي يمكنه احتوائهم على الأقل.
public HashSet(int capacity, float fillRatio) يستخدم هذا الكونستركتور لتحديد حجم كائن الـ HashSet الأولي الذي نريده أن يحجز له في الذاكرة.
الرقم الذي نضعه مكان الباراميتر capacity يحدد عدد العناصر التي يمكن أن يحتويها كائن الـ HashSet, و تذكر أن حجمه يزيد عند الحاجة.
الرقم الذي نضعه مكان الباراميتر fillRatio يمكن أن يكون بين 0.0f و 1.0f.
هنا يتم ضرب المتغيرين capacity و fillRatio ببعضهم, ناتج عملية الضرب يحدد متى سيتم زيادة حجم كائن الـ HashSet في الذاكرة.
public HashSet(Collection c) يستخدم هذا الكونستركتور لإنشاء كائن نوعه HashSet يحتوي على عناصر كائن الـ Collection الذي نمرره له كـ Argument.

دوال الكلاس HashSet

الجدول التالي يحتوي على جميع دوال الكلاس HashSet.

الدالة مع تعريفها
public boolean add(Object o) تضيف عنصر جديد في كائن الـ HashSet.
ترجع true إذا تمت الإضافة بنجاح.
public void clear() تمسح جميع العناصر الموجودة في كائن الـ HashSet.
public Object clone() تنشئ نسخة من كائن الـ HashSet.
public boolean contains(Object o) ترجع true إذا كان كائن الـ HashSet يحتوي على القيمة التي نضعها لها كـ Argument.
public boolean isEmpty() ترجع true في حال كان كائن الـ HashSet فارغاً.
public boolean remove(Object o) تحذف عنصر محدد من كائن الـ HashSet و ترجعه.
ترجع true إذا تم حذف الكائن بنجاح, غير ذلك ترجع false.
public int size() ترجع عدد العناصر الموجودة في كائن الـ HashSet.
public Iterator iterator() ترجع كائن نوعه Iterator يحتوي على جميع عناصر كائن الـ HashSet.

مثال شامل

في المثال التالي قمنا بتعريف كائن نوعه HashSet, إسمه hs, ثم أدخلنا فيه 6 عناصر.

بعدها قمنا بعرض عناصر الكائن hs, ثم عرضنا عددهم.


Main.java
import java.util.HashSet;		// HashSet هنا قمنا باستدعاء الكلاس
 
public class Main {
 
    public static void main(String[] args) {
 
        // hs إسمه HashSet هنا قمنا بإنشاء كائن من الكلاس
        HashSet hs = new HashSet();
 
        // hs هنا قمنا بإدخال 6 عناصر في الكائن
        hs.add("A");
        hs.add("B");
        hs.add("C");
        hs.add("D");
        hs.add("E");
        hs.add("F");
 
        // hs هنا قمنا بعرض عدد عناصر الكائن
        System.out.println("All elements: " + hs + "\n");
 
        // لاحظ أنه لم يتم تخزينهم بالترتيب الذي أدخلناهم فيه .hs هنا قمنا بعرض عناصر الكائن
        System.out.println("Number of elements: " + hs.size());
 
    }
 
}
		

سنحصل على النتيجة التالية عند التشغيل.

All elements: [D, E, F, A, B, C]

Number of elements: 6 
		

الدورات

أدوات مساعدة

أقسام الموقع

دورات
مقالات كتب مشاريع أسئلة