هش ست (HashSet)
«هش ست (HashSet)» ظرفی برای داده های یکتا است. یعنی عضو تکراری نگه نمی دارد. مثل لیست حضور کلاس که هر اسم فقط یک بار می آید. این کلاس در بسته java.util است و رابط «مجموعه (Set)» را پیاده سازی می کند.
ساخت یک HashSet
«رابط (Interface)» یعنی قرارداد رفتار. HashSet طبق قرارداد Set کار می کند. پس اعضا یکتا هستند.
import java.util.HashSet; // Import the HashSet class
HashSet<String> cars = new HashSet<String>();
افزودن عضو و جلوگیری از تکرار
متد «add()» عضو را اضافه می کند. تکراری ها پذیرفته نمی شوند. خروجی ترتیب خاصی ندارد.
// Import the HashSet class
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<String> cars = new HashSet<String>();
cars.add("Volvo");
cars.add("BMW");
cars.add("Ford");
cars.add("BMW"); // Duplicate
cars.add("Mazda");
System.out.println(cars);
}
}
نکته: مقدار «BMW» دوبار اضافه شد اما فقط یک بار دیده می شود.
بررسی وجود عضو
برای پرسیدن «آیا هست؟»، از «contains()» استفاده کن. مثل جست وجوی اسم در لیست مدرسه.
cars.contains("Mazda");
حذف و پاک کردن
«remove()» یک عضو را برمی دارد. «clear()» همه چیز را خالی می کند.
cars.remove("Volvo");
cars.clear();
تعداد اعضا
با «size()» تعداد اعضای یکتا را می بینی. تکراری ها شمارش نمی شوند.
cars.size();
حلقه foreach روی HashSet
با حلقه for-each از روی اعضا رد شو. ترتیب تضمین نیست.
for (String i : cars) {
System.out.println(i);
}
انواع دیگر: عددی و بررسی عضویت
نوع های اولیه در جاوا «شیء» نیستند. پس از «کلاس های بسته بندی (Wrapper)» مثل «Integer» استفاده کن.
import java.util.HashSet;
public class Main {
public static void main(String[] args) {
HashSet<Integer> numbers = new HashSet<Integer>();
numbers.add(4);
numbers.add(7);
numbers.add(8);
for (int i = 1; i <= 10; i++) {
if (numbers.contains(i)) {
System.out.println(i + " was found in the set.");
} else {
System.out.println(i + " was not found in the set.");
}
}
}
}
کلیدواژه var
از جاوا 10 می توانی با «var» متغیر بسازی. کامپایلر نوع را حدس می زند. اما خیلی ها برای شفافیت نوع کامل را می نویسند.
// Without var
HashSet<String> cars = new HashSet<String>();
// With var
var cars = new HashSet<String>();
اعلان با Set و نمونه HashSet
گاهی «نوع متغیر» را Set می گذارند اما «نمونه» از HashSet می سازند. این کار انعطاف آینده را بیشتر می کند.
import java.util.Set;
import java.util.HashSet;
Set<String> cars = new HashSet<>();
گام های تمرینی
- یک HashSet بساز و چند نام اضافه کن.
- یک نام تکراری بفرست و خروجی را ببین.
- با contains و size نتیجه را بررسی کن.
نکته: اگر ترتیب مهم است، به LinkedHashSet فکر کن. اگر مرتب بودن مهم است، صفحه TreeSet را ببین.
نکته: برای آشنایی با خانواده کالکشن ها، صفحه کالکشن ها (Collections) را هم مرور کن.
جمع بندی سریع
- HashSet عضو تکراری را نمی پذیرد.
- ترتیب عناصر ثابت نیست.
- contains و remove بسیار کاربردی اند.
- برای ترتیب ورود از LinkedHashSet کمک بگیر.
- برای مرتب بودن از TreeSet استفاده کن.