جلسه شماره 94رایگان

Set HashSet in Java

00:15:30

توضیحات جلسه

🎥 این ویدیو قسمت هشتاد و هفتم از بوت‌کمپ رایگان جاواست. 📚 ست‌ها در جاوا (Java Sets) – آموزش هش ست در این ویدیو سراغ یکی از بخش‌های مهم کالکشن‌ها میریم: ست‌ها (Set) و به‌طور خاص هش ست‌ها (HashSet). با هم یاد می‌گیریم ست‌ها چه ویژگی‌هایی دارن، چه تفاوتی با لیست‌ها (List) دارن و چطور می‌تونیم از هش ست برای ذخیره‌سازی داده‌ها استفاده کنیم. در این ویدیو بررسی می‌کنیم: تعریف ست‌ها و ویژگی‌های آنها بررسی سلسله‌مراتب اینترفیس Set در جاوا نحوه ایجاد و استفاده از شیء Set عملیات‌های مختلف روی ست‌ها مثل اضافه کردن، حذف کردن و جستجو متدهای مختلف اینترفیس Set آیا ست‌ها ترتیب داده‌ها رو حفظ می‌کنند یا نه؟ در انتها هم یک مرور کلی داریم تا نکات مهم بهتر در ذهنتون جا بیفته. 💬 گروه پرسش و پاسخ تلگرام: @programmingByFarzadAfi 💬 گروه پرسش و پاسخ بله: @programming_by_farzadafi هر سوالی داشتی، می‌تونی توی گروه بپرسی؛ من یا مربی‌های گروه کمکت می‌کنیم 💬 🎯 بوت‌کمپ رایگان جاوا – آموزش پروژه‌محور برای یادگیری عمیق و ورود به بازار کار.

جزوه و مستندات

مفاهیم کلیدی

  • Set Interface

بخشی از Java Collection Framework است که مجموعه‌ای از المان‌های منحصربه‌فرد یا Unique را نمایش می‌دهد. این اینترفیس اجازه اضافه کردن مقادیر تکراری را نمی‌دهد.

  • HashSet

یکی از پیاده‌سازی‌های معروف Set در جاوا است که برای ذخیره‌سازی داده‌ها از مکانیزم هش‌تیبل یا Hash Table استفاده می‌کند. این کلاس ترتیب ورود المان‌ها را حفظ نمی‌کند، اما عملیات جستجو، درج و حذف را بسیار بهینه انجام می‌دهد.

  • Duplicate Value

به مقادیر تکراری گفته می‌شود که در ساختار Set مجاز نیستند. اگر بخواهید مقداری را که از قبل در ست وجود دارد دوباره اضافه کنید، این عملیات انجام نمی‌شود.

  • Null Value

در HashSet فقط می‌توانید یک مقدار null داشته باشید. تلاش برای اضافه کردن null دوم به دلیل تکراری بودن، با خطا مواجه نمی‌شود، اما مقدار جدیدی هم ذخیره نخواهد شد.

  • Generics

قابلیتی است که اجازه می‌دهد نوع داده‌های ورودی به ست را محدود کنید؛ برای مثال، فقط String یا Integer. این کار باعث ایجاد Type Safety می‌شود و از خطاهای زمان اجرا جلوگیری می‌کند.

  • Type Safety

به معنای اطمینان از این است که فقط اشیایی از یک نوع خاص در کالکشن ذخیره می‌شوند. این موضوع توسط Generics در جاوا مدیریت می‌شود.


موارد مصاحبه ای

  • تفاوت اصلی Set و List چیست؟

در List امکان ذخیره مقادیر تکراری وجود دارد و ترتیب المان‌ها حفظ می‌شود. اما در Set تمام المان‌ها باید منحصربه‌فرد باشند و لزوماً ترتیبی در ذخیره‌سازی وجود ندارد.

  • آیا HashSet ترتیب ورود داده‌ها را حفظ می‌کند؟

خیر. HashSet هیچ تضمینی نمی‌دهد که المان‌ها را به همان ترتیبی که وارد شده‌اند، یعنی Insertion Order، نگهداری یا نمایش دهد.

  • متد add در صورت تکراری بودن داده چه خروجی‌ای برمی‌گرداند؟

متد add خروجی از نوع boolean دارد. اگر المان جدید باشد و با موفقیت اضافه شود، مقدار true برمی‌گرداند. اگر المان تکراری باشد، مقدار false برمی‌گرداند.

  • چرا در Set متد get(index) وجود ندارد؟

چون ست‌ها، به‌ویژه HashSet، بر اساس ایندکس کار نمی‌کنند. آن‌ها المان‌ها را بر اساس ساختار داخلی خود، مانند هش‌کد، مدیریت می‌کنند؛ بنابراین دسترسی از طریق شماره ایندکس در آن‌ها معنا ندارد.

  • چگونه می‌توان وجود یک المان را در Set بررسی کرد؟

با استفاده از متد contains می‌توان وجود یک مقدار را بررسی کرد. این متد در صورت وجود مقدار در ست، مقدار true برمی‌گرداند.


سناریو کاربردی

در آموزش، یک HashSet از نوع String ایجاد شد. ابتدا رشته‌های "A"، "B" و "C" به آن اضافه شدند. زمانی که تلاش شد رشته "A" برای بار دوم اضافه شود، متد add مقدار false برگرداند. با چاپ اعضای ست مشخص شد که فقط یک نسخه از "A" وجود دارد.

در مثالی دیگر، مجموعه‌ای از اعداد مانند 1، 5، 99، 100 و 42 به یک HashSet اضافه شدند. خروجی نشان داد که اعداد با ترتیبی متفاوت از زمان ورود چاپ می‌شوند؛ برای مثال، عدد 1 که سومین ورودی بود، ممکن است در ابتدا چاپ شود. این سناریو نشان می‌دهد که نمی‌توان به ترتیب نمایش المان‌ها در HashSet اعتماد کرد.


بیشتر بدانید

  • IDE Tip

در محیط IntelliJ IDEA، هنگام تعریف کالکشن‌ها می‌توانید با استفاده از قابلیت پیشنهاد خودکار، اینترفیس‌ها و کلاس‌های موردنظر را سریع‌تر import کنید.

  • نکته برنامه‌نویسی

برای تعریف یک ست، بهتر است نوع متغیر را از نوع اینترفیس Set و پیاده‌سازی آن را از نوع کلاس HashSet در نظر بگیرید؛ مانند:

Set<Integer> numbers = new HashSet<>();

این کار باعث می‌شود کد شما منعطف‌تر باشد و در آینده راحت‌تر بتوانید پیاده‌سازی ست را تغییر دهید.

  • تبدیل به آرایه

با استفاده از متد toArray در جاوا، می‌توانید تمام المان‌های موجود در یک Set را به یک آرایه معمولی تبدیل کنید و از آن استفاده کنید.

  • متد ریموو remove

این متد نیز مانند add خروجی boolean برمی‌گرداند. اگر المان موردنظر در ست وجود داشته باشد و با موفقیت حذف شود، مقدار true برگردانده می‌شود.