کلاسهای مجموعهای در جاوا
در جاوا، مجموعهها (Collections) به شما این امکان را میدهند که گروهی از عناصر را مدیریت کنید. مجموعهها به طور کلی به دو دسته تقسیم میشوند: مجموعههای مترادف (Set) و مجموعههای کلید-مقدار (Map). در جاوا، کلاسهای مختلفی برای پیادهسازی مجموعهها وجود دارد که هر کدام ویژگیها و کاربرد خاص خود را دارند. در اینجا به معرفی برخی از این کلاسها میپردازیم:
۱. ArrayList
کلاس ArrayList یک پیادهسازی از رابط List است که اجازه میدهد مجموعهای از عناصر را به صورت ترتیبی ذخیره کنید. این کلاس به دلیل استفاده از آرایهها در پسزمینه، دسترسی تصادفی به عناصر را با سرعت بالا فراهم میکند.
ویژگیها:
- قابلیت ذخیرهسازی دادهها به صورت ترتیبی.
- پشتیبانی از دسترسی تصادفی (یعنی میتوانید به هر عنصر از طریق ایندکس دسترسی پیدا کنید).
- اندازه آن میتواند در طول زمان تغییر کند.
- امکان ذخیره عناصر تکراری.
مثال:
public class ArrayListExample {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("Apple");
list.add("Banana");
list.add("Cherry");
// دسترسی به عناصر
System.out.println(list.get(0)); // Apple
System.out.println(list.size()); // تعداد عناصر
}
}
۲. LinkedList
کلاس LinkedList یک پیادهسازی دیگر از رابط List است که از یک ساختار داده لینکشده (linked list) برای ذخیره عناصر استفاده میکند. این باعث میشود که افزودن و حذف عناصر در ابتدای یا میانه لیست با سرعت بالاتری انجام شود، اما دسترسی تصادفی به عناصر کندتر است.
ویژگیها:
- مناسب برای انجام عملیات افزودن و حذف در میانه لیست.
- دسترسی تصادفی به عناصر در مقایسه با ArrayList کندتر است.
- میتواند به عنوان یک Queue (صف) و Deque (صف دوطرفه) نیز استفاده شود.
مثال:
public class LinkedListExample {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
list.add("Apple");
list.add("Banana");
list.addFirst("Orange");
System.out.println(list); // [Orange, Apple, Banana]
list.removeLast(); // حذف آخرین عنصر
System.out.println(list); // [Orange, Apple]
}
}
۳. HashSet
کلاس HashSet یک پیادهسازی از رابط Set است که از یک ساختار هش برای ذخیره عناصر استفاده میکند. در این مجموعه، عناصر به صورت تصادفی ذخیره میشوند و ترتیب خاصی ندارند. همچنین، HashSet هیچگونه عنصر تکراری را نمیپذیرد.
ویژگیها:
- عدم ترتیب ذخیرهسازی عناصر.
- عدم اجازه دادن به تکراری بودن عناصر.
- عملیات افزودن، حذف و جستجو به طور متوسط با زمان ثابت (O(1)) انجام میشود.
مثال:
public class HashSetExample {
public static void main(String[] args) {
HashSet<String> set = new HashSet<>();
set.add("Apple");
set.add("Banana");
set.add("Apple"); // تکراری، حذف میشود
System.out.println(set); // [Apple, Banana]
}
}
۴. TreeSet
کلاس TreeSet نیز یک پیادهسازی از رابط Set است که عناصر را به ترتیب طبیعی (یا با استفاده از یک مقایسهگر سفارشی) ذخیره میکند. این مجموعه از یک درخت جستجوی دودویی متوازن (Red-Black Tree) استفاده میکند که منجر به ذخیرهسازی عناصر به صورت مرتب میشود.
ویژگیها:
- ذخیرهسازی عناصر به ترتیب طبیعی.
- هیچگونه عنصر تکراری را نمیپذیرد.
- عملیات افزودن، حذف و جستجو با زمان لگاریتمی (O(log n)) انجام میشود.
مثال:
public class TreeSetExample {
public static void main(String[] args) {
TreeSet<String> set = new TreeSet<>();
set.add("Apple");
set.add("Banana");
set.add("Cherry");
System.out.println(set); // [Apple, Banana, Cherry]
}
}
۵. HashMap
کلاس HashMap یک پیادهسازی از رابط Map است که از یک ساختار داده هش برای ذخیرهسازی جفتهای کلید-مقدار استفاده میکند. در این مجموعه، کلیدها باید یکتا باشند، اما مقادیر میتوانند تکراری باشند. HashMap ترتیب ذخیرهسازی عناصر را تضمین نمیکند.
ویژگیها:
- ذخیرهسازی جفتهای کلید-مقدار.
- کلیدها باید یکتا باشند.
- عملیات افزودن، حذف و جستجو به طور متوسط با زمان ثابت (O(1)) انجام میشود.
مثال:
public class HashMapExample {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<>();
map.put("1", "Apple");
map.put("2", "Banana");
map.put("3", "Cherry");
System.out.println(map.get("2")); // Banana
System.out.println(map); // {1=Apple, 2=Banana, 3=Cherry}
}
}
۶. TreeMap
کلاس TreeMap نیز یک پیادهسازی از رابط Map است که جفتهای کلید-مقدار را به ترتیب طبیعی کلیدها یا با استفاده از یک مقایسهگر سفارشی ذخیره میکند. این کلاس از یک درخت جستجوی دودویی متوازن (Red-Black Tree) استفاده میکند که باعث میشود کلیدها به ترتیب مرتب ذخیره شوند.
ویژگیها:
- ذخیرهسازی جفتهای کلید-مقدار به ترتیب کلیدها.
- کلیدها باید یکتا باشند.
- عملیات افزودن، حذف و جستجو با زمان لگاریتمی (O(log n)) انجام میشود.
مثال:
public class TreeMapExample {
public static void main(String[] args) {
TreeMap<Integer, String> map = new TreeMap<>();
map.put(1, "Apple");
map.put(2, "Banana");
map.put(3, "Cherry");
System.out.println(map); // {1=Apple, 2=Banana, 3=Cherry}
}
}
جمعبندی
در جاوا، کلاسهای مختلفی برای مدیریت مجموعهها وجود دارد که هر کدام ویژگیها و کاربرد خاص خود را دارند:
- ArrayList: مناسب برای دسترسی تصادفی و افزودن عناصر در انتهای مجموعه.
- LinkedList: مناسب برای انجام عملیات افزودن و حذف در ابتدای یا میانه مجموعه.
- HashSet: مجموعهای بدون ترتیب با عملکرد سریع و عدم پذیرش عناصر تکراری.
- TreeSet: مجموعهای مرتب که عناصر را به ترتیب طبیعی یا با مقایسهگر سفارشی ذخیره میکند.
- HashMap: ذخیرهسازی جفتهای کلید-مقدار با عملکرد سریع و بدون ترتیب.
- TreeMap: ذخیرهسازی جفتهای کلید-مقدار به ترتیب مرتب کلیدها.
این کلاسها ابزارهای قدرتمندی برای مدیریت دادهها در جاوا هستند که بسته به نیاز برنامهتان میتوانید از آنها استفاده کنید.
