• Tags
  •         
  • www.breakyizhan.com
  •    

    当应该基于优先级处理对象时,使用PriorityQueue。众所周知,队列遵循先进先出算法,但有时需要根据优先级处理队列的元素,即当PriorityQueue发挥作用时。PriorityQueue基于优先级堆。优先级队列的元素按照自然顺序排序,或者由队列构造时提供的比较器排序,具体取决于使用的构造函数。优先级队列上的几个要点如下:

    • PriorityQueue不允许NULL指针。
    • 我们无法创建不可比较的对象的PriorityQueue
    • PriorityQueue是未绑定的队列。
    • 此队列的头部是指定排序的最小元素。如果多个元素被绑定为最小值,则头部是这些元素之一 - 关系被任意打破。
    • 队列检索操作轮询,删除,查看和元素访问队列头部的元素。
    • 它继承了AbstractQueue,AbstractCollection,Collection和Object类的方法。

    PriorityQueue类的构造函数

    • PriorityQueue():创建一个PriorityQueue,其默认初始容量(11)根据其自然顺序对其元素进行排序。
    • PriorityQueue(Collection c):创建包含指定集合中元素的PriorityQueue。
    • PriorityQueue(int initialCapacity):创建具有指定初始容量的PriorityQueue,该容量根据其自然顺序对其元素进行排序。
    • PriorityQueue(int initialCapacity,Comparator comparator):创建具有指定初始容量的PriorityQueue,该容量根据指定的比较器对其元素进行排序。
    • PriorityQueue(PriorityQueue c):创建包含指定优先级队列中元素的PriorityQueue。
    • PriorityQueue(SortedSet c):创建包含指定有序集合中元素的PriorityQueue。

    下面的程序说明了PriorityQueue的基本操作:

    // Java progrm to demonstrate working of priority queue in Java
    import java.util.*;
    
    class Example
    {
        public static void main(String args[])
        {
            // Creating empty priority queue
            PriorityQueue<String> pQueue =
                              new PriorityQueue<String>();
    
            // Adding items to the pQueue using add()
            pQueue.add("C");
            pQueue.add("C++");
            pQueue.add("Java");
            pQueue.add("Python");
    
            // Printing the most priority element
            System.out.println("Head value using peek function:"
                                               + pQueue.peek());
    
            // Printing all elements
            System.out.println("The queue elements:");
            Iterator itr = pQueue.iterator();
            while (itr.hasNext())
                System.out.println(itr.next());
    
            // Removing the top priority element (or head) and
            // printing the modified pQueue using poll()
            pQueue.poll();
            System.out.println("After removing an element" +
                               "with poll function:");
            Iterator<String> itr2 = pQueue.iterator();
            while (itr2.hasNext())
                System.out.println(itr2.next());
    
            // Removing Java using remove()
            pQueue.remove("Java");
            System.out.println("after removing Java with" +
                               " remove function:");
            Iterator<String> itr3 = pQueue.iterator();
            while (itr3.hasNext())
                System.out.println(itr3.next());
    
            // Check if an element is present using contains()
            boolean b = pQueue.contains("C");
            System.out.println ( "Priority queue contains C " +
                                 "or not?: " + b);
    
            // Getting objects from the queue using toArray()
            // in an array and print the array 
            Object[] arr = pQueue.toArray();
            System.out.println ( "Value in array: ");
            for (int i = 0; i<arr.length; i++)
              System.out.println ( "Value: " + arr[i].toString()) ;
        }
    }
    

    输出:

    Head value using peek function:C
    The queue elements:
    C
    C++
    Java
    Python
    After removing an elementwith poll function:
    C++
    Python
    Java
    after removing Java with remove function:
    C++
    Python
    Priority queue contains C or not?: false
    Value in array: 
    Value: C++
    Value: Python

    PriorityQueue类中的方法:

    1. boolean add(E element):此方法将指定的元素插入此优先级队列。
    2. public remove():此方法从此队列中删除指定元素的单个实例(如果存在)
    3. public poll():此方法检索并删除此队列的头部,如果此队列为空,则返回null。
    4. public peek():此方法检索但不删除此队列的头部,如果此队列为空,则返回null。
    5. Iterator iterator():返回此队列中元素的迭代器。
    6. boolean contains(Object o):如果此队列包含指定的元素,则此方法返回true
    7. void clear():此方法用于删除优先级队列的所有内容。
    8. boolean offer(E e):此方法用于将特定元素插入优先级队列。
    9. int size():该方法用于返回集合中存在的元素数。
    10. toArray(): 此方法用于返回包含此队列中所有元素的数组。
    11. Comparator comparator(): :该方法用于返回可用于对队列元素进行排序的比较器。
     
    转载请保留页面地址:https://www.breakyizhan.com/java/5358.html