Java中的PriorityQueue Java.util.PriorityQueue

作者: Arvin Chen 分类: Java 来源: Break易站(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(): :该方法用于返回可用于对队列元素进行排序的比较器。
  •   本文标题:Java中的PriorityQueue Java.util.PriorityQueue - Break易站
    转载请保留页面地址:https://www.breakyizhan.com/java/5358.html
    扫描二维码添加微信 
  • ,领取淘宝优惠券,淘宝购物更优惠。现在添加微信,还可以领取机械键盘优惠券!添加微信后,分享淘宝选中的机械键盘给淘宝机器人即可领取!
    支持我们,就用微信淘宝!

    发表笔记

    电子邮件地址不会被公开。 必填项已用*标注

    更多阅读