آموزش Queue و Set در جاوا، جامع و کاربردی
جلسات دوره
مهدی عباسی
مهدی عباسی هستم، مسلط به حداقل ۲۰ زبان مطرح برنامه نویسی به صورت پیشرفته، مدیر عامل شرکت آریا نرم افزار و بنیانگذار آکادمی درسمن، مسلط به تدریس دروس تخصصی کاردانی و کارشناسی کامپیوتر، پایگاه داده ها، برنامه نویسی پیشرفته، مبانی برنامه نویسی، مباحث ویژه طراحی وب و .... مشاهده رزومه
آموزش Queue و Set در جاوا، جامع و کاربردی
در این جلسه میخواهیم سختار Queue و Set ها را بررسی کنیم و همچنین متدهای کاربردی هر یک را توضیح دهیم.
Queue(صف) ساختار FIFO دارند یعنی عناصر به انتهای لیست اضافه میشوند و از ابتدای لیست خارج میشوند.
Queue دو شکل پیاده سازی دارند: Queue(صف معمولی) – Deque(صف حلقه ای).
Queue<String> queue1=new LinkedList<>(Arrays.asList("mehdi","ahmad","mohammad","reza","ali"));
Queue<String> queue2=new PriorityQueue<>(Arrays.asList("mehdi","ahmad","mohammad","reza","ali"));
Queue<String> queue3=new ArrayDeque<>(Arrays.asList("mehdi","ahmad","mohammad","reza","ali"));
System.out.println(queue1);
System.out.println(queue2);
System.out.println(queue3);
خروجی
[mehdi, ahmad, mohammad, reza, ali]
[ahmad, ali, mohammad, reza, mehdi]
[mehdi, ahmad, mohammad, reza, ali]
همانطور که در بالا مشاهده میکنید ترتیب عناصر در صف LinkedList و ArrayDeque بر اساس ترتیب ورود عناصر قرار گرفته اما در صف PriorityQueue ترتیب بهم ریخته است.
متدهای پرکاربرد Queue
متد peek
این متد اولین عنصر در صف را برمیگرداند.
Queue<String> queue1=new LinkedList<>(Arrays.asList("mehdi","ahmad","mohammad","reza","ali"));
Queue<String> queue2=new PriorityQueue<>(Arrays.asList("mehdi","ahmad","mohammad","reza","ali"));
System.out.println(queue1.peek());
System.out.println(queue2.peek());
خروجی
mehdi
ahmad
متد poll
این متد اولین عنصر در صف را برمیگرداند و آن را از دورن صف پاک میکند.
Queue<String> queue1=new LinkedList<>(Arrays.asList("mehdi","ahmad","mohammad","reza","ali"));
Queue<String> queue2=new PriorityQueue<>(Arrays.asList("mehdi","ahmad","mohammad","reza","ali"));
System.out.println(queue1.poll());
System.out.println(queue2.poll());
System.out.println(queue1);
System.out.println(queue2);
خروجی
mehdi
ahmad
[ahmad, mohammad, reza, ali]
[ali, mehdi, mohammad, reza]
نکته: در PriorityQueue هنگام درج یا حذف عناصر احتمال جابجایی عناصر وجود دارد.
متد remove
این متد نیز مشابه متد poll اولین عنصر صف را برمیگرداند و آن را از درون صف پاک میکند.
Queue<String> queue1=new LinkedList<>(Arrays.asList("mehdi","ahmad","mohammad","reza","ali"));
Queue<String> queue2=new PriorityQueue<>(Arrays.asList("mehdi","ahmad","mohammad","reza","ali"));
System.out.println(queue1.remove());
System.out.println(queue2.remove());
خروجی
mehdi
ahmad
Set یا مجموعه
زمانی که میخواهیم مجموعه ای از داده ها داشته باشیم که عنصر تکراری درون آن وجود نداشته باشد از Set ها استفاده میکنیم. Set ها مانند مجموعه ها درون ریاضی هستند و عنصر تکراری درون آنها وجود ندارد. Set ها دو نوع دارند: Set(مجموعه غیر مرتب) – SortedSet(مجموعه مرتب شده). درون تمامی ساختار های Set داده تکراری وجود ندارد و ترتیب عناصر مهم نیست.
HashSet<Integer> set1=new HashSet(Arrays.asList(12,45,32,87,23,45,67,12,66,87));
LinkedHashSet<Integer> set2=new LinkedHashSet(Arrays.asList(12,45,32,87,23,45,67,12,66,87));
TreeSet<Integer> set3=new TreeSet(Arrays.asList(12,45,32,87,23,45,67,12,3,66,87));
خروجی
[32, 66, 67, 87, 23, 12, 45]
[12, 45, 32, 87, 23, 67, 66]
[12, 23, 32, 45, 66, 67, 87]
HashSet: عناصر را اضافه میکند و در صورت تکراری بودن عنصر، عنصر جدید را اضافه میکند و قبلی را پاک میکند.
LinkedHashSet: عناصر را اضافه میکند و در صورت تکراری بودن عنصر آن را اضافه نمیکند.
TreeSet: علاوه بر حذف عناصر تکراری، ترتیب عناصر را حفظ میکند.
ساختار HashSet و TreeSet مانند آرایه است اما ساختار LinkedSet مانند لیست پیوندی است.
نکته: سرعت TreeSet به دلیل مرتب سازی عناصر پایین از HashSet و LinkeedSet است.
متدهای کاربردی TreeSet
همانطور که گفتیم ترتیب عناصر در Set ها اهمیت ندارد و نمیتوانیم مانند لیستها با شماره خانه به مقدار آنها دسترسی داشته باشیم. اما درون TreeSet به دلیل مرتب سازی عناصر می توانیم به مقدار قبل و بعد عناصر دسترسی داشته باشیم.
متد lower
این متد یک مقدار دریافت میکند و عنصر قبلی آن را در مجموعه برمیگرداند.
HashSet<Integer> set1=new HashSet(Arrays.asList(12,45,32,87,23,45,67,12,66,87));
LinkedHashSet<Integer> set2=new LinkedHashSet(Arrays.asList(12,45,32,87,23,45,67,12,66,87));
TreeSet<Integer> set3=new TreeSet(Arrays.asList(12,45,32,87,23,45,67,12,3,66,87));
خروجی
45
متد higher
این متد یک مقدار دریافت میکند و عنصر بعدی آن را در مجموعه برمیگرداند.
TreeSet<Integer> set3=new TreeSet(Arrays.asList(12,45,32,87,23,45,67,12,3,66,87));
System.out.println(set3.higher(66));
خروجی
67
متد firstاین متد اولین عنصر را برمیگرداند.
TreeSet<Integer> set3=new TreeSet(Arrays.asList(12,45,32,87,23,45,67,12,3,66,87));
System.out.println(set3.first());
خروجی
3
توضیحات ذکر شده چکیده ای میباشد از آنچه که میخواهید بیاموزید، برای فهم بهتر مطالب این جلسه، میتوانید این درس را خریداری کنید و از نکات ارزشمند آن بهره مند شوید.
سپاسگزاریم که همراه ما هستید
امیدواریم که این آموزش مورد توجه شما دوستان عزیز قرار گرفته باشد و بتواند شما را در راه رسیدن به اهدافتان کمک کند. برای دسترسی بیشتر به جلسات این دوره از آموزش جاوا پیشرفته کلیک کنید.
نظر شما در تصمیم دیگران اثرگذار است.
لطفا برای همراهان درسمن و بهتر شدن دوره نظر خود را بنویسید.