Farzad Afi Logo

FarzadAfi

آموزش تخصصی برنامه نویسی

Set HashSet in Java

📖توضیحات درس

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

📄جزوه

مفاهیم کلیدی

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

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

  • 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" وجود دارد.

در مثالی دیگر، مجموعه‌ای از اعداد (مانند ۱، ۵، ۹۹، ۱۰۰، ۴۲) به یک HashSet اضافه شدند. خروجی نشان داد که اعداد به ترتیب متفاوتی نسبت به زمان ورود چاپ می‌شوند (مثلاً عدد ۱ که سومین ورودی بود، در ابتدا چاپ شد). این سناریو ثابت کرد که نمی‌توان به ترتیب نمایش المان‌ها در HashSet اعتماد کرد.


بیشتر بدانید

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

  • نکته برنامه‌نویسی برای تعریف یک ست، بهتر است نوع متغیر را از نوع اینترفیس (Set) و پیاده‌سازی آن را از نوع کلاس (HashSet) در نظر بگیرید (مانند: Set<Integer> numbers = new HashSet<>();). این کار باعث می‌شود کد شما منعطف‌تر باشد و در آینده راحت‌تر بتوانید پیاده‌سازی ست را تغییر دهید.

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

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