How to use Java PriorityQueue with Examples
javapriority
1
queue
7
Male avatar

loveprogramming viết ngày 05/03/2021

https://grokonez.com/java/how-to-use-java-priorityqueue-with-examples

[no_toc]In the tutorial, Grokonez introduces how to work with Java PriorityQueue by examples:

  • How does Java PriorityQueue work?
  • Explore Java PriorityQueue Hierarchy
  • Create Java PriorityQueue with Integer, String, and Custom Object Class

Related posts:

Java PriorityQueue

  • Java PriorityQueue is an unbounded priority queue.
  • The elements of the priority queue are ordered according to their natural ordering, or by a Comparator.
    • The front of the priority queue contains the least element.
    • And the rear of the priority queue contains the greatest element.

grokonez-howto-java-priority-queue-examples

  • PriorityQueue does not permit null elements.
  • PriorityQueue does not permit insertion of non-comparable objects. ClassCastException will be throwed.
  • The head of this queue is the least element. The queue operations poll, remove, peek, and element access the element at the head of the queue.
  • Java PriorityQueue is not synchronized. Multiple threads should not access the same PriorityQueue concurrently if having any of the threads modifies the queue.

    Java PriorityQueue Hierarchy

grokonez-java-priority-queue-hierarchy-examples

Java PriorityQueue with Integer Example

In the follwing example, We create an Integer Java PriorityQueue, then do a list operations on the queue:

  • Insert an element to PriorityQueue with offer and add method.
  • Retrieve a head value of the Queue, but NOT remove it by peek() method.
  • Removes a single instance of the specified element from this queue by remove(Object o) method.
  • Retrieves and removes the head of this queue by poll() method.

Example:


import java.util.PriorityQueue;
import java.util.Queue;

public class JavaPriorityQueueExamples {

    public static void main(String[] args) {
        Queue intQueue = new PriorityQueue();
        // Inserts the specified element into this priority queue.
        intQueue.offer(10);
        intQueue.offer(1);
        intQueue.offer(5);
        intQueue.offer(9);
        
        // E poll(): Retrieves and removes the head of this queue
        System.out.println(intQueue.remove());
        /*
         * 1
         */
        
        // Retrieves, but does not remove, the head of this queue
        int head = intQueue.peek();
        System.out.println("headValue = " + head); // headValue = 5
        
        // Inserts the specified element into this priority queue.
        intQueue.add(7);
        intQueue.add(2);
        
        head = intQueue.element();
        System.out.println("headValue = " + head); // headValue = 2
        
        // Removes a single instance of the specified element from this queue, if it is present.
        boolean containOrNot = intQueue.remove(9);
        System.out.println(containOrNot); // true
        
        System.out.println("---");
        
        while(!intQueue.isEmpty()) {
            System.out.println(intQueue.poll());
        }
        
        /*
         * 2
         * 5
         * 7
         * 10
         */
    }
}
  • In above example, we use PriorityQueue() Constructor to create a PriorityQueue with the default initial capacity (11) that orders its elements according to their natural ordering.

  • add() and offer() method, both can insert an element to a PriorityQueue, But what is the difference?

  • The offer method inserts an element if possible, otherwise returning false.

  • This differs from the Collection.add method, which can fail to add an element only by throwing an unchecked exception.

  • The remove() and poll() methods remove and return the head of the queue.
    -> BUT when the queue is empty, the remove() method throws an exception, while the poll() method returns null.

  • The element() and peek() retrive the head's value of the queue and NOT remove. When the queue is empty:

  • element() throws NoSuchElementException.

  • peek() returns null.

Now we do an example to iterate all elements of a Java PriorityQueue:

  • using iterator(): to return an iterator over the elements in the queue.
  • using toArray(): to return an array containing all the elements in the queue.

import java.util.Iterator;
import java.util.PriorityQueue;
import java.util.Queue;

public class JavaPriorityQueueExamples{

    public static void main(String[] args) {
        Queue<Integer> intQueue = new PriorityQueue<Integer>();
        // Inserts the specified element into this priority queue.
        intQueue.offer(10);
        intQueue.offer(1);
        intQueue.offer(5);
        intQueue.offer(9);
        
        // Returns an iterator over the elements in this queue.
        Iterator<Integer> intIterator = intQueue.iterator();
        
        while (intIterator.hasNext()) 
            System.out.print(intIterator.next() + " ");
        /*
         * 1 9 5 10 
         */
        
        System.out.println();
        
        // Returns an array containing all of the elements in this queue.
        Object[] intArr =  intQueue.toArray();
        for(int i=0; i<intArr.length; i++) {
            System.out.print(intArr[i] + " ");
        }
        /*
         * 1 9 5 10 
         */
    }
}

Java PriorityQueue with String Example

  • Example: Create Java String PriorityQueue using Natural Ordering of String

import java.util.PriorityQueue;
import java.util.Queue;

public class JavaPriorityQueueExamples {

    public static void main(String[] args) {
        Queue strQueue = new PriorityQueue();
        
        // Inserts the specified element into this priority queue.
        strQueue.offer("Jack");
        strQueue.offer("Charlie");
        strQueue.offer("Joe");
        strQueue.offer("George");
        
        while(!strQueue.isEmpty()) {
            System.out.print(strQueue.poll() + " ");
        }
        
        /*
         * -> Charlie George Jack Joe   
         */
    }
}

Create Java PriorityQueue with a custom Comparator

  • Create a Java PriorityQueue using a Custom Comparator that compares two Strings by their length:

import java.util.Comparator;
import java.util.PriorityQueue;
import java.util.Queue;

public class JavaPriorityQueueExamples {

    public static void main(String[] args) {
        Queue strQueue = new PriorityQueue((Comparator super String>) new Comparator() {
            public int compare(String s1, String s2) {
                return s1.length() - s2.length();
            }
        });
        
        // Inserts the specified element into this priority queue.
        strQueue.offer("Jack");
        strQueue.offer("Charlie");
        strQueue.offer("Joe");
        strQueue.offer("George");
        
        while(!strQueue.isEmpty()) {
            System.out.print(strQueue.poll() + " ");
        }
    }
}

-> Output:


Joe Jack George Charlie

Java PriorityQueue with Custom Object Example

  • Create an Java Developer class:

class Developer{
    Integer id;
    String name;
    Double salary;
    
    public Developer(Integer id, String name, Double salary){
        this.id = id;
        this.name = name;
        this.salary = salary;
    }
    
    public int getId() {
        return this.id;
    }
    
    public String getName() {
        return this.name;
    }
    
    public Double getSalary() {
        return this.salary;
    }
    
    public String toString() {
        return String.format("[id = %d, name = %s, salary = %.2f]", id, name, salary);
    }
}
  • Implement Comparable interface to compare its elements and order them accordingly as below:

class Developer implements Comparable{
    ...
    
    @Override
    public int compareTo(Developer d) {
        if(this.getSalary() > d.getSalary()) {
            return 1;
        } else if (this.getSalary() 
  • Create a Java PriorityQueue Example with Developer class:

import java.util.PriorityQueue;
import java.util.Queue;

public class JavaPriorityQueueExamples {

    public static void main(String[] args) {
        Queue devQueue = new PriorityQueue();
        
        // Inserts the specified element into this priority queue.
        devQueue.offer(new Developer(1, "Jack", 6000.0));
        devQueue.offer(new Developer(4, "Joe", 7000.0));
        devQueue.offer(new Developer(10, "Davis", 6500.0));
        devQueue.offer(new Developer(6, "Mary", 5700.0));
        
        while(!devQueue.isEmpty()) {
            System.out.println(devQueue.poll());
        }       
    }
}

-> Output:


/*
 * [id = 6, name = Mary, salary = 5700,00]
 * [id = 1, name = Jack, salary = 6000,00]
 * [id = 10, name = Davis, salary = 6500,00]
 * [id = 4, name = Joe, salary = 7000,00]
 */

-> The Developer with smallest salary is removed first

Conclusion

We had learned how to work with Java PriorityQueue by examples:

  • Create Java PriorityQueue with Natural Ordering of Elements.
  • Create Java PriorityQueue with Custom Comparator.
  • Create Java PriorityQueue with Custom Object that implements Comparable interface.
  • Do a list operations of Java PriorityQueue: offer, peek, poll, remove...

Happy Learning! See you later!

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

Male avatar

loveprogramming

209 bài viết.
64 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
Male avatar
1 0
Tutorial Link: (Link) (Ảnh) Django is a Pythonbased free and opensource web framework that follows the modeltemplateview architectural pattern. A...
loveprogramming viết 5 tháng trước
1 0
Male avatar
1 0
https://loizenai.com/angular11nodejspostgresqlcrudexample/ Angular 11 Node.js PostgreSQL Crud Example (Ảnh) Tutorial: “Angular 11 Node.js Postg...
loveprogramming viết 4 tháng trước
1 0
Male avatar
1 0
Angular Spring Boot jwt Authentication Example Github https://loizenai.com/angularspringbootjwt/ (Ảnh) Tutorial: ” Angular Spring Boot jwt Authe...
loveprogramming viết 4 tháng trước
1 0
Bài viết liên quan
White
36 0
Từ lúc học lập trình, chắc hẳn chúng ta đều đã nghe đến các khái niệm như queue, stack, linked list rồi một đống thứ hầm bà lằng ấy trong mấy môn l...
Minh Monmen viết 2 năm trước
36 0
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


Male avatar
{{userFollowed ? 'Following' : 'Follow'}}
209 bài viết.
64 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!