مجموعه به سادگی مجموعه ای از اشیاء منحصر به فرد است. منحصر به فرد به این معنی است که هیچ دو شی نمی توانند مقدار(های) یکسانی داشته باشند. بسته به اجرای مجموعه، ممکن است سفارش داده شود یا نباشد. مجموعه جاوا، به عنوان یک نوع داده انتزاعی (ADT)، دارای چند عملیات کلیدی است (که در آن T نشان دهنده هر نوع داده ای مانند int، String یا هر شیء کلاسی است):

boolean add(T item)
: اگر مورد با موفقیت به مجموعه اضافه شده باشد true و اگر مورد قبلاً در مجموعه بوده باشد false را برمی گرداند.boolean remove(T item)
: اگر مورد با موفقیت از مجموعه حذف شده باشد true و در غیر این صورت false (اگر مورد در مجموعه نبود) را برمی گرداند.boolean contains(T item)
: اگر مورد در مجموعه باشد true و در غیر این صورت false برمی گرداند.boolean isEmpty()
: اگر مجموعه خالی باشد true و در غیر این صورت false برمی گرداند.
contains()
تابع زمان اجرا بسیار خوبی را برای این کار ارائه می دهد: پیچیدگی زمانی O(1) یا O(log n) بسته به اینکه پیاده سازی مورد استفاده به ترتیب a HashSet
یا a باشد TreeSet
. بنابراین یک مجموعه برای چه چیزی ممکن است استفاده شود؟ خوب، اگر زمانی نیاز به پیگیری بسیاری از اشیاء متمایز دارید - مانند شناسهها، نامها، یا سایر شناسههای منحصربهفرد - و مکرراً بررسی میکنید که آیا یک مورد در چنین مجموعهای وجود دارد یا خیر، یک مجموعه احتمالاً انتخاب خوبی است. در اینجا یک مثال استفاده از یک مجموعه آورده شده است: تصور کنید که فهرستی از اشیاء دارید که Student
همه دانشآموزان یک کلاس را نشان میدهند. هر کدام Student
ممکن است یک نام (رشته) و درجه (int) منحصر به فرد برای این کلاس داشته باشند. اگر میخواهید به طور مکرر به فهرستی از همه دانشآموزان A (نمره >=90) ارجاع دهید، خستهکننده خواهد بود که این فهرست را مرور کنید و هر بار نمره هر دانشآموز را بررسی کنید. درعوض، میتوانید HashSet
از رشتهای استفاده کنید که تمام دانشآموزان A را در کلاس ردیابی میکند، به این ترتیب:
- هر بار که نمرات دانش آموزان به روز می شود، می توانید به سادگی بررسی کنید که آیا نمره جدید دانش آموز بزرگتر یا مساوی 90 است یا خیر.
- اگر چنین است، آنها را به مجموعه دانش آموزان A اضافه کنید
add()
- اگر آنها قبلاً دانش آموز A بودند، این عملیات به سادگی نادیده گرفته می شود.
- اگر نه، آنها را از مجموعه دانشآموزان A حذف کنید
remove()
- اگر در این مرحله دانش آموز A نبودند، این عملیات به سادگی نادیده گرفته می شود.
- اگر چنین است، آنها را به مجموعه دانش آموزان A اضافه کنید
contains(“Johnny Appleseed”)
با مجموعه انجام دهید. البته این فقط یک نمونه از یک مورد استفاده برای یک مجموعه است و این مشکل خاص ردیابی دانش آموزان A را می توان از راه های دیگری حل کرد.
پیاده سازی ها: HashSet در جاوا و جاوا TreeSet مثال
هر دوHashSet
in Java و TreeSet
in Java در java.utils package
. شما می توانید آنها را به این صورت وارد کنید:
// imports everything from Java's util package, including HashSet and TreeSet
import java.util.*;
یا
import java.util.HashSet; // imports only the Java HashSet
import java.util.TreeSet; // imports only the Java TreeSet
تفاوت اصلی بین جاوا HashSet
و جاوا TreeSet
این است که TreeSet
مرتب شده است، در حالی که اینطور HashSet
نیست. به همین دلیل است که TreeSet
پیچیدگی زمانی O(log n) برای عملیات کلیدی دارد، در حالی که HashSet
پیچیدگی زمانی O(1) یا ثابت دارد. باید TreeSet
همیشه نظم را حفظ کند. علاوه بر عملیات مجموعه کلیدی که قبلاً ذکر شد، هر دو HashSet
و TreeSet
در جاوا چند عملکرد مفید دیگر نیز دارند:
void clear()
: مجموعه را از همه اشیا پاک می کند.int size()
: تعداد اشیاء موجود در مجموعه را برمی گرداند.Object clone()
: یک کپی کم عمق از مجموعه را برمی گرداند.Iterator iterator()
: یک تکرار کننده را به مجموعه برمی گرداند که از اولین شی شروع می شود.
size()
اگر میخواهید ببینید چند دانشآموز A دارید یا clear()
میخواهید فهرست را در پایان ترم پاک کنید، میتوانید تماس بگیرید. میتوانید clone()
برای ایجاد و نگهداشتن یک کلون از فهرست دانشآموزان A در یک مقطع زمانی خاص، مانند گزارشهای میانترم (به این ترتیب، کلون همراه با نسخه اصلی بهروز نمیماند).
نمونه هش ست جاوا
در اینجا یک مثال کوتاه از aHashSet
از String
s استفاده شده در جاوا آورده شده است:
import java.util.HashSet;
class HashSetDemo {
public static void main(String[] args)
{
// create a HashSet of Strings
HashSet<String> hs = new HashSet<String>();
// Add elements using the add() method
hs.add("Collin");
hs.add("Bob");
hs.add("Abigail");
// Duplicates will ignored; this statement is useless
hs.add("Collin");
System.out.println(hs);
System.out.println("Bob is in the set (T/F): " + hs.contains("Bob"));
System.out.println("Max is in the set (T/F): " + hs.contains("Max"));
}
}
خروجی: --------
[Collin, Bob, Abigail]
Bob is in the set (T/F): true
Max is in the set (T/F): false
مثال Java TreeSet
مثال مجموعه جاوا می تواند به شما در درک نظریه کمک کند. در اینجا مثال کوتاهی از استفاده از aTreeSet
از s در جاوا آمده است:String
import java.util.TreeSet;
class TreeSetDemo {
public static void main(String[] args)
{
// create a TreeSet of Strings
TreeSet<String> ts = new TreeSet<String>();
// Add elements using the add() method.
ts.add("Collin");
ts.add("Bob");
ts.add("Abigail");
// Duplicates will ignored; this statement is useless
ts.add("Collin");
// printing the set prints the names in alphabetical order!
System.out.println(ts);
System.out.println("Bob is in the set (T/F): " + ts.contains("Bob"));
System.out.println("Max is in the set (T/F): " + ts.contains("Max"));
System.out.println("Size of the set: " + ts.size());
ts.clear();
System.out.println("Size of the set after clear(): " + ts.size());
}
}
خروجی: -------
[Abigail, Bob, Collin]
Bob is in the set (T/F): true
Max is in the set (T/F): false
Size of the set: 3
Size of the set after clear(): 0
همین! امیدوارم این کمک کرده باشد 😊
GO TO FULL VERSION