Java中的Java.util.PriorityQueue类
它是基于优先级堆的优先队列。
- 此类中的元素按自然顺序排列,或者取决于我们在构建时使用的构造函数。
- 它不允许空指针。
- 如果它依赖于自然排序,则不允许插入无法比较的对象。
构造函数:
- PriorityQueue(): 创建一个具有默认初始容量(11)的PriorityQueue,根据它们的自然顺序对它们的元素进行排序。
- PriorityQueue(Collection c): 创建包含指定集合中的元素的PriorityQueue。
- PriorityQueue(int initialCapacity) :创建具有指定初始容量的PriorityQueue,根据其自然排序对其元素进行排序。
- PriorityQueue(int initialCapacity, Comparator comparator): 创建具有指定初始容量的PriorityQueue,根据指定的比较器对其元素进行排序。
- PriorityQueue(PriorityQueue c) :创建一个包含指定优先级队列中元素的PriorityQueue。
- PriorityQueue(SortedSet c) :创建一个包含指定排序集中元素的PriorityQueue。
声明:
public class PriorityQueue
extends AbstractQueue
implements Serializable
方法:
add(element) : java.util.PriorityQueue.add() 向优先队列添加元素。
语法 :
public boolean add(E e)
参数 :
element : 需要添加的元素。
Return :
返回 true。
异常 :
– ClassCastException
– NullPointerException
comparator() : java.util.PriorityQueue.comparator() 对队列中的元素进行排序。
语法 :
public Comparator comparator()
Return :
对队列进行排序或返回 null,如果是自然排序的。
contains(Object obj) : java.util.PriorityQueue.contains(obj) 如果优先队列包含元素“obj”,则返回 true。
语法 :
public boolean contains(Object obj)
参数 :
obj : 要检查的对象
Return :
如果存在对象,则返回 true,否则返回 false
iterator() : java.util.PriorityQueue.iterator() 迭代队列中的元素。
语法 :
public Iterator iterator()
Return :
迭代队列中的元素。
offer(element) : java.util.PriorityQueue.offer() 将特定元素插入给定的优先队列中。
语法 :
public boolean offer(E element)
参数 :
element : 要输入的特定元素。
Return :
返回 true。
异常 :
– ClassCastException
– NullPointerException
peek() : java.util.PriorityQueue.peek() 确定队列的头元素。
语法 :
public E peek()
Return :
如果存在头部,则返回,否则返回 null。
poll() : java.util.PriorityQueue.poll() 确定头元素,然后将其删除。
remove(Object obj) : java.util.PriorityQueue.remove() 从队列中删除特定对象。
size() : java.util.PriorityQueue.size() 返回优先队列中的元素数量。
toArray() : java.util.PriorityQueue.toArray() 返回包含 PriorityQueue 元素的数组。
toArray(): java.util.PriorityQueue.toArray() 返回一个包含PriorityQueue所有元素的数组。
toArray(T[] array): java.util.PriorityQueue.toArray(T[] a) 返回包含PriorityQueue元素的数组。
clear(): java.util.PriorityQueue.clear() 清空PriorityQueue中所有元素。
// Java程序示例
// java.utl.priorityQueue类的方法
// add(), comparator(), conatins(), iterator(), offer()
// peek(), poll(), toArray(), size(), toArray(t[] g1),
// remove(), clear()
import java.util.*;
public class NewClass
{
public static void main(String[] args)
{
// 创建Priority Queue:
PriorityQueue <Integer> geek = new PriorityQueue <Integer> ();
for(int i=2; i<=20; i=i+2)
{
// 使用add()添加元素
geek.add(new Integer (i));
}
System.out.println("geek PriorityQueue : " + geek);
// 使用comparator()方法进行比较
// 这里不需要排序,因为它是自然排序的。
Comparator geek_comp = geek.comparator();
System.out.println("geek PriorityQueue : " + geek_comp);
// 使用contains()方法
boolean check = geek.contains(6);
System.out.println("使用contains()方法 : " + check);
// 使用iterator()方法
Iterator g_iterator = geek.iterator();
System.out.print("Iterator values : ");
while(g_iterator.hasNext())
{
System.out.print(g_iterator.next() + " ");
}
System.out.println("");
// 使用offer()方法
geek.offer(3050);
System.out.println("geek PriorityQueue : " + geek);
// 使用peek()方法
System.out.println("通过peek()方法查看PriorityQueue中的头部元素 : " + geek.peek());
//使用poll()方法
int h = geek.poll();
System.out.println("\n通过poll()方法查看PriorityQueue中的头部元素 : " + h);
System.out.println("因为poll()方法,geek PriorityQueue发生了变化 : " + geek);
// 使用remove()方法
boolean r = geek.remove(8);
System.out.println("\n可以删除 : " + r);
System.out.println("因为remove()方法,geek PriorityQueue发生了变化 : " + geek);
// 使用size()方法
System.out.println("\nPriorityQueue的大小 : " + geek.size());
// 使用toArray()方法
Object[] g = geek.toArray();
System.out.print ( "PriorityQueue中的数组 : ");
for ( int i = 0; i<g.length; i++ )
{
System.out.print (g[i].toString() + " ") ;
}
System.out.println("\n");
// 使用toArray(t[] g1)方法
Integer[] g2 = new Integer[5];
Integer[] g1 = geek.toArray(g2);
System.out.print ( "大小为5的PriorityQueue中的数组 : ");
for ( int i = 0; i<g1.length; i++ )
{
System.out.print (g1[i].toString() + " ") ;
}
System.out.println("\n");
// 使用clear()方法
geek.clear();
System.out.println("执行clear()方法后,PriorityQueue为空 : " + geek);
}
输出 :
geek PriorityQueue : [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
geek PriorityQueue : null
使用contains()方法 : true
Iterator values : 2 4 6 8 10 12 14 16 18 20
geek PriorityQueue : [2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 3050]
通过peek()方法查看PriorityQueue中的头部元素 : 2
通过poll()方法查看PriorityQueue中的头部元素 : 2
因为poll()方法,geek PriorityQueue发生了变化 : [4, 6, 8, 10, 12, 14, 16, 18, 20, 3050]
可以删除 : true
因为remove()方法,geek PriorityQueue发生了变化 : [4, 6, 10, 12, 14, 16, 18, 20, 3050]
PriorityQueue的大小 : 9
PriorityQueue中的数组 : 4 6 10 12 14 16 18 20 3050
大小为5的PriorityQueue中的数组 : 4 6 10 12 14
执行clear()方法后,PriorityQueue为空 : []
极客教程