Java: PriorityQueue

Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực

PriorityQueue (Hàng đợi ưu tiên) tương tự như hàng đợi nhưng các phần tử không được sắp xếp theo cấu trúc FIFO. Chúng được sắp xếp theo cách thức do người dùng xác định. Các phần tử được sắp xếp theo thứ tự tự nhiên hoặc theo một bộ so sánh comparator. Hàng đợi ưu tiên không cho phép thêm các đối tượng không thể so sánh và cũng không cho phép các phần tử rỗng. Hàng đợi ưu tiên không bị ràng buộc và cho phép hàng đợi tăng dung lượng.

Khi các phần tử được thêm vào hàng đợi ưu tiên, dung lượng của nó sẽ tự động tăng lên. Các hàm tạo của lớp này như sau:

PriorityQueue(): Phương thức này tạo ra một PriorityQueue và sắp xếp các phần tử của nó theo thứ tự tự nhiên của chúng. Dung lượng mặc định là 11.

PriorityQueue(Collection<? extends E> c): Hàm tạo tạo ra một PriorityQueue chứa các phần tử từ bộ sưu tập được chỉ định, c. Dung lượng ban đầu của hàng đợi là 110% kích thước của tập hợp được chỉ định.

PriorityQueue(int InitialCapacity): Hàm tạo tạo ra một PriorityQueue với dung lượng ban đầu được chỉ định và sắp xếp các phần tử của nó theo thứ tự tự nhiên của chúng.

PriorityQueue(int InitialCapacity, Comparator<? super E> comparator): Hàm tạo tạo ra một PriorityQueue với dung lượng ban đầu được chỉ định để sắp xếp thứ tự các phần tử của nó theo comparator được chỉ định.

PriorityQueue(PriorityQueue<? expand E> c): Hàm tạo tạo ra một PriorityQueue chứa các phần tử từ collection được chỉ định. Dung lượng ban đầu của hàng đợi là 110% kích thước của collection được chỉ định.

PriorityQueue(SortedSet <? expand E> c): Hàm tạo tạo ra một PriorityQueue chứa các phần tử từ collection được chỉ định. Dung lượng ban đầu của hàng đợi là 110% kích thước của collection được chỉ định.

Các phương thức của lớp PriorityQueue

Lớp PriorityQueue kế thừa phương thức của lớp Queue.

Các phương thức khác được hỗ trợ bởi lớp PriorityQueue như sau:

add(E e): Phương thức thêm phần tử cụ thể vào hàng đợi ưu tiên và trả về giá trị boolean.

clear(): Phương thức loại bỏ tất cả các phần tử khỏi hàng đợi ưu tiên.

comparator(): Phương thức trả về bộ so sánh được sử dụng để sắp xếp collection này. Phương thức sẽ trả về null nếu collection này được sắp xếp theo thứ tự tự nhiên các phần tử của nó.

contains(Object o): Phương thức trả về giá trị boolean là true nếu hàng đợi chứa phần tử được chỉ định.

iterator(): Phương thức trả về một trình lặp trên các phần tử trong hàng đợi.

toArray(): Phương thức này trả về một mảng các đối tượng chứa tất cả các phần tử trong hàng đợi.

Ví dụ sau thể hiện việc sử dụng lớp PriorityQueue.

PriorityQueue<String> queue = new PriorityQueue<String>();
queue.offer("New York");
queue.offer("Kansas");
queue.offer("California");
queue.offer("Alabama");
System.out.println("1. " + queue.poll()); // removes
System.out.println("2. " + queue.poll()); // removes
System.out.println("3. " + queue.peek());
System.out.println("4. " + queue.peek());
System.out.println("5. " + queue.remove()); // removes
System.out.println("6. " + queue.remove());// removes
System.out.println("7. " + queue.peek());
System.out.println("8. " + queue.element());// Throws Exception

Output như sau:

1. Alabama
2. California
3. Kansas
4. Kansas
5. Kansas
6. New York
7. null
Exception in thread “main” java.util.NoSuchElementException
at java.util.AbstractQueue.element(Unknown Source)
at QueueTest.main(QueueTest.java:24

Trong ví dụ trên, một thể hiện PriorityQueue được tạo sẽ lưu trữ các đối tượng String. Phương thức offer() được sử dụng để thêm các phần tử vào hàng đợi. Phương thức poll​​() và remove() được sử dụng để lấy và trả về các giá trị từ hàng đợi. Phương thức peek() lấy giá trị nhưng không loại bỏ phần đầu của hàng đợi. Khi ở cuối, phương thức element() được sử dụng để lấy giá trị, một ngoại lệ được đưa ra khi hàng đợi trống.

» Tiếp: Arrays
« Trước: Queue
Các khóa học qua video:
Python SQL Server PHP C# Lập trình C Java HTML5-CSS3-JavaScript
Học trên YouTube <76K/tháng. Đăng ký Hội viên
Viết nhanh hơn - Học tốt hơn
Giải phóng thời gian, khai phóng năng lực
Copied !!!