HashSet

کلاس HashSet زیر کلاس AbstractSet است و مفهوم Set یعنی یک مجموعه بدون تکرار را پیاده سازی می‌کند و در پکیج java.util.HashSet قرار دارد. قبلاً با مفهوم Set آشنا شدیم، کلاس HashSet برای پیاده سازی Set از الگوریتم درهم سازی (hashing) استفاده می‌کند. مهم‌ترین کاربرد HashSet این است که تشخیص دهیم شی خاصی در مجموعه وجود دارد یا خیر ؟ چون HashSet از جدول Hash و الگوریتم درهم سازی استفاده می‌کند عمل جست و جو در آن بسیار سریع است و از این ویژگی آن در جست و جوهای پیشرفته مانند الگوریتم‌های جست و جوی هوش مصنوعی استفاده می‌شود. برای ساخت HashSet باید از یکی از سازنده‌های زیر استفاده کنیم :

HashSet()

یک HashSet خالی با جدول نگه دارنده ای با اندازه پیش فرض ایجاد می‌کند.

HashSet(Collection c)

یک HashSet جدید ایجاد می‌کند و اعضای کالکشن c را به آن اضافه می‌کند.

HashSet(int Capacity)

یک HashSet خالی با جدول نگه دارنده ای با اندازه Capacity ایجاد می‌کند، هر زمان که لازم باشد اندازه جدول نگه دارنده به صورت خودکار افزایش می‌یابد.

HashSet(int Capacity,float fillRatio)

یک HashSet خالی با جدول نگه دارنده ای با اندازه Capacity ایجاد می‌کند، هر زمان که لازم باشد اندازه جدول نگه دارنده به صورت خودکار افزایش می‌یابد، پارامتر fillRation عددی بین 0.0 و 1.0 است و مشخص می‌کند که جدول نگه دارنده چه زمان باید تغییر اندازه داده شود، به عنوان مثال 0.8 به معنی آن است که هنگامی که ظرفیت جدول به بیش از هشتاد درصد رسید اندازه جدول افزایش یابد. متدهای مهم HashSet در جدول زیر آمده‌اند :

متد کاربرد
add(Object o) یک عنصر جدید به مجموعه اضافه می‌کند.
clear() کل مجموعه را پاک می‌کند.
contains(Object o) وجود یا عدم وجود یک عنصر در مجموعه را بررسی می‌کند.
isEmpty() خالی بودن مجموعه را بررسی می‌کند.
iterator() یک Iterator برای پیمایش اعضای مجموعه در اختیار ما قرار می‌دهد.
remove(Object o) یک عنصر را از مجموعه حذف می‌کند.
size() اندازه مجموعه را بر می‌گرداند.
toArray() یک آرایه از روی اعضای مجموعه بر می‌گرداند.

مهم‌ترین ویژگی‌های HashSetعبارت‌اند از :

  • متدهای ()add و ()remove و ()contains در HashSet فوق العاده سریع هستند و این مهم‌ترین ویژگی HashSet است.
  • در HashSet عضو تکراری وجود ندارد.
  • اعضای داخل مجموعه HashSet ترتیب خاصی ندارند.

در مثال زیر با استفاده از متد ()add چند عضو به HashSet اضافه می‌کنیم و سپس کل مجموعه را چاپ می‌کنیم، با متد ()remove عنصری را حذف می‌کنیم و مجدداً کل مجموعه را چاپ می‌کنیم، در انتها نیز وجود یا عدم وجود دو مورد در مجموعه را با متد contains بررسی می‌کنیم.

import java.util.HashSet;

public class HashSetDemo 
{
    public static void main(String[] args) 
    {
        HashSet mySet = new HashSet();

        mySet.add("A");
        mySet.add("B");
        mySet.add("C");
        mySet.add("A");
        mySet.add("D");
        mySet.add("E");

        System.out.println(mySet);

        mySet.remove("D");
        System.out.println(mySet);

        System.out.println(mySet.contains("D"));
        System.out.println(mySet.contains("E"));
    }
}
[A, B, C, D, E]
[A, B, C, E]
false
true

در کد بالا مشاهده می‌کنید که HashSet عضو تکراری نگه داری نمی‌کند، به علاوه هنگامی که عضوی در مجموعه وجود نداشته باشد متد ()contains مقدار false را بر می‌گرداند.