Set HashSet in Java
📖توضیحات درس
📄جزوه
مفاهیم کلیدی
-
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بازگردانده میشود.
