مجموعه در جاوا چیست؟
یک مجموعه در جاوا به عنوان یک ظرف نشان داده می شود که همه عناصر را در یک واحد واحد گروه بندی می کند. به عنوان مثال ، یک پوشه نامه (گروهی از ایمیل ها)، یک فهرست تلفن (نگاشت نام ها به شماره تلفن).چارچوب چیست؟
فریم ورک یک پایه یا طرح اولیه است که با استفاده از کلاسها و رابطهای مختلف ارائه شده شروع به کار بر روی آن میکنید. به عنوان مثال ، لاراول یکی از معروف ترین فریم ورک های پی اچ پی است که یک اسکلت اولیه برای برنامه شما فراهم می کند.چارچوب مجموعه ها در جاوا چیست؟
همه اشیاء به همراه معماری که نشان دهنده و ارائه روش های مختلف برای دستکاری مجموعه ها است در یک شی واحد گروه بندی می شوند. بنابراین چارچوب مجموعهها در جاوا ساختارهای دادهای مختلفی را ارائه میکند که قبلاً برای ذخیره دادهها و روشها پیادهسازی شدهاند تا با ویژگیهایی مانند مرتبسازی، جستجو، حذف و درج آنها را دستکاری کنید . به عنوان مثال ، شما می خواهید سیستمی را برای برخی از شرکت های تصادفی پیاده سازی کنید تا خدمات را برای مشتریان خود بهبود بخشد، بر اساس اولین سرویس اول. این همچنین به عنوان پیاده سازی FIFO (اول در اولین خروجی) شناخته می شود. حال باید این ساختار داده را پیاده سازی کنیم و سپس از آن برای رسیدن به هدف خود استفاده کنیم. چارچوب مجموعهها یک رابط صف را در اختیار ما قرار میدهد که فقط باید آن را وارد کنیم تا پیادهسازی کنیم، سپس از آن استفاده کنیم و کارمان تمام شد. پیاده سازی : می توانید تمام مجموعه ها را با استفاده از خط زیر وارد کنید:import java.util.*;
اگر می خواهید مجموعه خاصی را وارد کنید، از نام بسته دقیق استفاده کنید، مانند:
import java.util.LinkedList;
مزایای مجموعه ها در جاوا
مزایای زیر را دارد.- قبلاً اجرا شده است (صرفه جویی در زمان).
- کارایی عملکرد (سرعت و کیفیت).
- تلاش برای یادگیری و استفاده از API های جدید را کاهش می دهد.
سلسله مراتب چارچوب مجموعه چیست؟
حالا بیایید سلسله مراتب مجموعه ها را ببینیم، اما ابتدا باید اجزای اساسی این چارچوب را بشناسیم.- رابط ها
- کلاس ها (اجرا)
- الگوریتم ها
سلسله مراتب چارچوب مجموعه

- مجموعه، تنظیم، صف و فهرست همه رابط هستند. Set، Queue و List توسط واسط Collection گسترش می یابند.
- PriorityQueue، HashSet، LinkedList و Stack همگی کلاسها یا پیادهسازی این رابطها هستند.
- اجباری نیست که یک کلاس فقط یک رابط را پیاده سازی کند . LinkedList همچنین رابط Deque را پیاده سازی می کند.
انواع مجموعه ها
فریمورک مجموعه های جاوا انواع مجموعه های زیادی را در خود دارد تا تلاش ما را کاهش دهد. در اینجا لیستی از برخی از مجموعه ها آمده است:- کلاس ArrayList
- کلاس LinkedList
- فهرست رابط
- تنظیم رابط
- رابط صف
- رابط نقشه
- کلاس PriorityQueue
- کلاس HashMap
- رابط قابل مقایسه
- کلاس LinkedHashMap
- کلاس TreeMap
- جدول هش
رابط های مجموعه
در اینجا به چند رابط مجموعه متداول و سپس چند روش پیاده سازی شده توسط کلاس ها می پردازیم.رابط مجموعه
این یک پایه اساسی برای چارچوب مجموعه ها است زیرا تمام روش های لازم برای پیاده سازی را ارائه می دهد. نقشه تنها ساختار داده ای است که آن را پیاده سازی نمی کند اما بقیه همه روش های آن را پیاده سازی می کنند. این رابط دارای روش هایی برای دانستن اندازه مجموعه، و اینکه آیا یک شی در مجموعه وجود دارد، اضافه کردن یا حذف اشیاء از مجموعه دارد.رابط تکرارپذیر
این رابط ریشه برای چارچوب مجموعه ها است، زیرا توسط رابط مجموعه که توسط همه کلاس ها پیاده سازی می شود، گسترش می یابد. یک تکرار کننده برای مجموعه خاص برمی گرداند تا روی آن تکرار شود.رابط صف
از صف برای نگهداری عناصر استفاده می شود اما نمی توان آنها را پردازش کرد. با اجرای عملیات جمع آوری اولیه، روش های درج و استخراج اضافی را نیز فراهم می کند.تنظیم رابط
مجموعه برای نگهداری عناصر منحصر به فرد در آن استفاده می شود. هرگز شامل عناصر تکراری نمی شود و انتزاع مجموعه ریاضی را برای نمایش مجموعه هایی مانند فرآیندهای در حال اجرا در ماشین مدل می کند.فهرست رابط
لیست یک مجموعه مرتب شده است که گاهی اوقات یک توالی نامیده می شود که می تواند عناصر تکراری را در خود نگه دارد. این کنترل را برای کاربر برای به روز رسانی یا حذف یک عنصر خاص، درج یک عنصر در یک نقطه خاص با استفاده از مقدار شاخص عدد صحیح آن، فراهم می کند. LinkedList و ArrayList کلاس های پیاده سازی رابط List هستند.رابط Deque
Deque مخفف صف دو سر است که به این معنی است که ما می توانیم عملیات را در هر دو انتها انجام دهیم. ما می توانیم عناصر را از هر دو طرف درج و حذف کنیم. رابط Deque رابط صف را گسترش می دهد. ArrayDeque و LinkedList هر دو رابط Deque را پیاده سازی می کنند. روش هایی را برای درج، حذف و بررسی نمونه از هر دو طرف ارائه می دهد.رابط نقشه
رابط نقشه نیز بخشی از چارچوب مجموعه ها است اما رابط مجموعه را گسترش نمی دهد. برای ذخیره جفت های کلید-مقدار استفاده می شود. پیاده سازی های اصلی آن HashMap، TreeMap و LinkesHashMap هستند که از جنبه های خاصی مشابه HashSet، TreeSet و LinkedHashSet هستند. همیشه حاوی کلیدهای منحصر به فرد است، اما مقادیر را می توان تکرار کرد. هنگامی که نیاز به افزودن، حذف یا جستجوی یک مورد بر اساس یک کلید دارید، مفید است. روش های اساسی مانند قرار دادن ، دریافت ، حذف ، اندازه ، خالی کردن و غیره را در اختیار ما قرار می دهد.روش های رایج این رابط ها
حال به چند روش متداول ارائه شده برای پیاده سازی کلاس های مختلف در این فریم ورک بجز رابط Map نگاه می کنیم.مواد و روش ها | شرح |
---|---|
افزودن بولی عمومی (E e) | برای درج یک عنصر در مجموعه استفاده می شود |
حذف بولین عمومی (عنصر شی) | برای حذف یک عنصر از مجموعه استفاده می شود |
اندازه int عمومی() | تعداد عناصر یک مجموعه را برمیگرداند |
بولین عمومی حاوی (عنصر شی) | برای جستجوی یک عنصر استفاده می شود |
بولین عمومی isEmpty() | خالی بودن مجموعه را بررسی می کند |
بولین عمومی برابر است (عنصر شی) | برابری را بررسی می کند |
کلاس های مجموعه
همانطور که می دانیم فریم ورک دارای رابط های مختلفی است که توسط کلاس های زیادی در داخل آن پیاده سازی می شود. حالا بیایید نگاهی به برخی از کلاس های رایج بیندازیم.LinkedList
این متداول ترین ساختار داده ای است که یک لیست پیوندی مضاعف را برای ذخیره عناصر درون آن پیاده سازی می کند. می تواند عناصر تکراری را ذخیره کند. این رابط Dequeue گسترش یافته توسط رابط Queue و رابط List را پیاده سازی می کند. هماهنگ نیست. اکنون بیایید ببینیم که چگونه مشکل خود را که در بالا بحث شد (مفهوم FIFO) با استفاده از LinkedList حل کنیم. مشکل این است که به مشتریان به روشی که آنها وارد می شوند خدمت رسانی کنیم، یعنی اولین بار به بیرون .مثال
import java.util.*;
public class LinkedListExample {
public static void main(String[] args) {
Queue<String> customerQueue = new LinkedList<String>();
//Adding customers to the Queue as they arrived
customerQueue.add("John");
customerQueue.add("Angelina");
customerQueue.add("Brooke");
customerQueue.add("Maxwell");
System.out.println("Customers in Queue:"+customerQueue);
//element() => returns head of the queue
//we will see our first customer and serve him
System.out.println("Head of the queue i.e first customer: "+customerQueue.element());
//remove () method =>removes first element(customer) from the queue i.e the customer is served so remove him to see next
System.out.println("Element removed from the queue: "+customerQueue.remove());
//poll () => removes and returns the head
System.out.println("Poll():Returned Head of the queue: "+customerQueue.poll());
//print the remaining customers in the Queue
System.out.println("Final Queue:"+customerQueue);
}
}
خروجی
مشتریان در صف:[جان، آنجلینا، بروک، ماکسول] رئیس صف یعنی اولین مشتری: جان عنصر از صف حذف شد: جان پول ():بازگردانده شده رئیس صف: آنجلینا صف نهایی:[بروک، ماکسول]
ArrayList
این به سادگی رابط List را پیاده سازی می کند. ترتیب درج را حفظ می کند و از یک آرایه پویا برای ذخیره عناصر انواع داده های مختلف استفاده می کند. عناصر را می توان کپی کرد. همچنین غیر همگام است و می تواند مقادیر null را ذخیره کند. حالا بیایید روش های مختلف آن را ببینیم... اینها زمانی مفید هستند که ما نمی دانیم چه تعداد رکورد یا عنصر را باید وارد کنیم. بیایید نمونه ای از کتابخانه را در نظر بگیریم که در آن نمی دانیم چند کتاب باید نگه داریم. بنابراین هر زمان که کتابی داریم، باید آن را در ArrayList وارد کنیم.مثال
public class ArrayListExample {
public static void main(String args[]) {
// Creating the ArrayList
ArrayList<String> books = new ArrayList<String>();
// Adding a book to the list
books.add("Absalom, Absalom!");
// Adding a book in array list
books.add("A Time to Kill");
// Adding a book to the list
books.add("The House of Mirth");
// Adding a book to the list
books.add("East of Eden");
// Traversing the list through Iterator
Iterator<String> itr = books.iterator();
while (itr.hasNext()) {
System.out.println(itr.next());
}
}
}
خروجی
ابشالوم، ابشالوم! زمانی برای کشتن خانه میرث در شرق عدن
HashSet
این رابط Set را پیاده سازی می کند و هرگز حاوی مقادیر تکراری نیست. جدول هش را برای ذخیره مقادیر پیاده سازی می کند. همچنین به مقادیر تهی اجازه می دهد. هرگز ترتیب درج را حفظ نمی کند، اما عملکرد زمان ثابتی را برای افزودن ، حذف ، اندازه و حاوی متدها ارائه می دهد. برای عملیات جستجو بهترین است و همگام نیست.مثال
import java.util.*;
class HashSetExample{
public static void main(String args[]){
//creating HashSet and adding elements to it
HashSet<Integer> hashSet=new HashSet();
hashSet.add(1);
hashSet.add(5);
hashSet.add(4);
hashSet.add(3);
hashSet.add(2);
//getting an iterator for the collection
Iterator<Integer> i=hashSet.iterator();
//iterating over the value
while(i.hasNext()) {
System.out.println(i.next());
}
}
}
خروجی
1 2 3 4 5
همانطور که می بینید ترتیب درج را حفظ نمی کند.
ArrayDeque
این رابط Deque را پیاده سازی می کند، بنابراین اجازه می دهد تا عملیات از هر دو طرف انجام شود. مقادیر null را اجازه نمی دهد. وقتی به صورت Stack و LinkedList اجرا می شود، سریعتر از Stack و LinkedList است. ArrayDeque هیچ محدودیتی در اندازه ندارد زیرا رشد می کند و طبق نیازها کوچک می شود. ناهمگام است، به این معنی که از نظر نخ ایمن نیست. برای ایمن نگه داشتن آن، باید منطق خارجی را پیاده سازی کنیم.مثال
import java.util.*;
public class ArrayDequeExample {
public static void main(String[] args) {
//creating Deque and adding elements
Deque<String> deque = new ArrayDeque<String>();
//adding an element
deque.add("One");
//adding an element at the start
deque.addFirst("Two");
//adding an element at the end
deque.addLast("Three");
//traversing elements of the collection
for (String str : deque) {
System.out.println(str);
}
}
}
خروجی
دو یک سه
HashMap
این پیاده سازی رابط نقشه است که توسط جدول هش پشتیبانی می شود. جفت های کلید-مقدار را ذخیره می کند. مقادیر null را اجازه نمی دهد. هماهنگ نیست. هرگز دستور درج را تضمین نمی کند. عملکرد زمان ثابتی را برای روش هایی مانند get و put ارائه می دهد . عملکرد آن به دو عامل بستگی دارد - ظرفیت اولیه و ضریب بار . ظرفیت تعداد سطل های جدول هش است بنابراین ظرفیت اولیه تعداد سطل های تخصیص داده شده در زمان ایجاد است. ضریب بار اندازه گیری است که نشان می دهد یک جدول هش چقدر می تواند پر شود قبل از اینکه ظرفیت آن افزایش یابد. روش Rehash برای افزایش ظرفیت استفاده می شود و عمدتاً تعداد سطل ها را دو برابر می کند.مثال
import java.util.*;
public class HashMapExample{
public static void main(String args[]){
//creating a HashMap
HashMap<Integer,String> map=new HashMap<Integer,String>();
//putting elements into the map
map.put(1,"England");
map.put(2,"USA");
map.put(3,"China");
//get element at index 2
System.out.println("Value at index 2 is: "+map.get(2));
System.out.println("iterating map");
//iterating the map
for(Map.Entry m : map.entrySet()){
System.out.println(m.getKey()+" "+m.getValue());
}
}
}
خروجی
مقدار در شاخص 2 عبارت است از: نقشه تکراری چین 1 انگلستان 2 ایالات متحده آمریکا 3 چین
الگوریتم ها
چارچوب مجموعه ها الگوریتم های مختلفی را برای عملیات های مختلف در اختیار ما قرار می دهد تا در مجموعه ها اعمال شود. در اینجا به بررسی این الگوریتم ها خواهیم پرداخت که کدام عملیات اصلی را پوشش می دهند. این شامل الگوریتم های مربوط به:- مرتب سازی
- جستجوکردن
- به هم زدن
- دستکاری معمول داده ها
- ترکیب بندی
- یافتن ارزش های افراطی
مرتب سازی
الگوریتم مرتب سازی یک لیست را بر اساس یک رابطه مرتب سازی مجدد ترتیب می دهد. دو شکل از روابط ارائه شده است.- سفارش طبیعی
- ترتیب مقایسه
سفارش طبیعی
در نظم طبیعی یک لیست بر اساس عناصر آن مرتب می شود.ترتیب مقایسه
در این شکل از سفارش یک پارامتر اضافی که یک مقایسه کننده است به همراه لیست ارسال می شود. یک الگوریتم مرتبسازی ادغام کمی بهینهشده برای مرتبسازی استفاده میشود که سریع و پایدار است زیرا زمان اجرای n log(n) را تضمین میکند و عناصر مساوی را دوباره ترتیب نمیدهد. ما از همان مثال ArrayList برای نشان دادن مرتبسازی استفاده خواهیم کرد.مثال
import java.util.*;
public class SortingExample{
public static void main(String args[]){
//Creating arraylist
ArrayList<String> books=new ArrayList<String>();
//Adding a book to the arraylist
books.add("A Time to Kill");
//Adding a book to the arraylist
books.add("Absalom, Absalom!");
//Adding a book to the arraylist
books.add("The House of Mirth");
//Adding a book to the arraylist
books.add("East of Eden");
//Traversing list through Iterator before sorting
Iterator itrBeforeSort=books.iterator();
while(itrBeforeSort.hasNext()){
System.out.println(itrBeforeSort.next());
}
//sorting the books
Collections.sort(books);
System.out.println("After sorting the books");
//Traversing list through Iterator after sorting
Iterator itr=books.iterator();
while(itr.hasNext()){
System.out.println(itr.next());
}
}
}
خروجی
زمانی برای کشتن ابشالوم، ابشالوم! خانه میرث شرق عدن پس از مرتب سازی کتاب ها زمانی برای کشتن ابشالوم، ابشالوم! شرق عدن خانه میرث
GO TO FULL VERSION