הממשק Queue זמין בחבילת java.util ואכן מרחיב את ממשק האוסף. הוא משמש לשמירה על האלמנטים המעובדים באופן First In First Out (FIFO). זוהי רשימה מסודרת של אובייקטים, כאשר הכנסת אלמנטים מתרחשת בסוף הרשימה, והסרה של אלמנטים מתרחשת בתחילת הרשימה.
בהיותו ממשק, התור דורש, לצורך ההכרזה, מחלקה קונקרטית, והמחלקות הנפוצות ביותר הן LinkedList ו- PriorityQueue ב-Java. הטמעות שנעשו על ידי מחלקות אלה אינן בטוחות בשרשור. אם יש צורך ביישום בטוח בשרשור, PriorityBlockingQueue היא אפשרות זמינה.
הצהרת ממשק תור
public interface Queue extends Collection
שיטות של ממשק Java Queue
שיטה | תיאור |
---|---|
הוספה בוליאנית (אובייקט) | הוא משמש כדי להכניס את האלמנט שצוין לתור זה ולהחזיר אמת לאחר הצלחה. |
הצעה בוליאנית (אובייקט) | הוא משמש להכנסת האלמנט שצוין לתור זה. |
Object remove() | הוא משמש לאחזור והסרה של ראש התור הזה. |
סקר אובייקט() | הוא משמש כדי לאחזר ולהסיר את ראש התור הזה, או להחזיר null אם התור הזה ריק. |
רכיב אובייקט() | הוא משמש כדי לאחזר, אבל לא להסיר, את ראש התור הזה. |
אובייקט הצצה() | הוא משמש כדי לאחזר, אבל לא להסיר, את ראש התור הזה, או להחזיר null אם התור הזה ריק. |
תכונות של תור
להלן כמה תכונות חשובות של תור.
- כפי שנדון קודם לכן, מושג FIFO משמש להכנסה ומחיקה של אלמנטים מהתור.
- ה-Java Queue מספק תמיכה לכל השיטות של ממשק האוסף כולל מחיקה, הכנסה וכו'.
- PriorityQueue, ArrayBlockingQueue ו-LinkedList הם המימושים שבהם נעשה שימוש בתדירות הגבוהה ביותר.
- ה-NullPointerException מועלה, אם מתבצעת פעולת null כלשהי ב-BlockingQueues.
- אותם תורים שנמצאים ב- util החבילה ידועה בתור Unbounded Queue.
- אותם תורים שנמצאים ב- מוֹעִיל החבילה ידועה בתור תורים מוגבלים.
- כל התורים חוסמים את ה-Deques מקלים על הסרה והכנסה בראש ובזנב של התור; בהתאמה. למעשה, deques תומכים בהכנסת והסרה של אלמנט בשני הקצוות.
Class PriorityQueue
PriorityQueue היא גם מחלקה המוגדרת במסגרת האוסף שנותנת לנו דרך לעבד את האובייקטים על בסיס עדיפות. כבר תואר שההכנסה והמחיקה של אובייקטים עוקבים אחר דפוס FIFO בתור Java. עם זאת, לפעמים צריך לעבד את רכיבי התור לפי העדיפות, שם נכנס לפעולה PriorityQueue.
הצהרת כיתה של PriorityQueue
בוא נראה את ההצהרה עבור מחלקה java.util.PriorityQueue.
public class PriorityQueue extends AbstractQueue implements Serializable
דוגמה ל-Java PriorityQueue
שם קובץ: TestCollection12.java
import java.util.*; class TestCollection12{ public static void main(String args[]){ PriorityQueue queue=new PriorityQueue(); queue.add('Amit'); queue.add('Vijay'); queue.add('Karan'); queue.add('Jai'); queue.add('Rahul'); System.out.println('head:'+queue.element()); System.out.println('head:'+queue.peek()); System.out.println('iterating the queue elements:'); Iterator itr=queue.iterator(); while(itr.hasNext()){ System.out.println(itr.next()); } queue.remove(); queue.poll(); System.out.println('after removing two elements:'); Iterator itr2=queue.iterator(); while(itr2.hasNext()){ System.out.println(itr2.next()); } } }בדוק את זה עכשיו
תְפוּקָה:
head:Amit head:Amit iterating the queue elements: Amit Jai Karan Vijay Rahul after removing two elements: Karan Rahul Vijay
דוגמה ל-Java PriorityQueue: ספר
בוא נראה דוגמה של PriorityQueue שבה אנחנו מוסיפים ספרים לתור ומדפיסים את כל הספרים. הרכיבים ב-PriorityQueue חייבים להיות מסוג Comparable. כיתות מחרוזת ו-Wrapper ניתנות להשוואה כברירת מחדל. כדי להוסיף אובייקטים מוגדרי משתמש ב-PriorityQueue, עליך ליישם ממשק Comparable.
שם קובץ: LinkedListExample.java
import java.util.*; class Book implements Comparable{ int id; String name,author,publisher; int quantity; public Book(int id, String name, String author, String publisher, int quantity) { this.id = id; this.name = name; this.author = author; this.publisher = publisher; this.quantity = quantity; } public int compareTo(Book b) { if(id>b.id){ return 1; }else if(id <b.id){ return -1; }else{ 0; } public class linkedlistexample { static void main(string[] args) queue priorityqueue(); creating books book b1="new" book(121,'let us c','yashwant kanetkar','bpb',8); b2="new" book(233,'operating system','galvin','wiley',6); b3="new" book(101,'data communications & networking','forouzan','mc graw hill',4); adding to the queue.add(b1); queue.add(b2); queue.add(b3); system.out.println('traversing elements:'); traversing elements for(book b:queue){ system.out.println(b.id+' '+b.name+' '+b.author+' '+b.publisher+' '+b.quantity); queue.remove(); system.out.println('after removing one record:'); < pre> <p> <strong>Output:</strong> </p> <pre>Traversing the queue elements: 101 Data Communications & Networking Forouzan Mc Graw Hill 4 233 Operating System Galvin Wiley 6 121 Let us C Yashwant Kanetkar BPB 8 After removing one book record: 121 Let us C Yashwant Kanetkar BPB 8 233 Operating System Galvin Wiley 6 </pre> <hr></b.id){>