PriorityQueue
优点:
在定义了排序的规则之后可以再加入的同时进行排序,可以缩短排序所需的时间,同时较set来说没有单一元素不可重复的的限制。
常用方法:
add:加入元素
clear:删除所有元素
isEmpty:判断队列是否为空
poll:检索并删除此队列的头,如果此队列为空,则返回
null
peek:检索但不删除此队列的头,如果此队列为空,则返回null
remove:检索并删除此队列的头,如果此队列为空会出现异常
comparator:返回用于排序此队列中元素的比较器,如果此队列是根据其元素的自然顺序排序的,则返回null
contains:返回队列中是否包含所给元素
size:返回所含的元素数量
创建方法:
/**
* 使用默认比较器
*/
PriorityQueue<Object> que = new PriorityQueue<>();
/**
* 使用自定义比较器(cmp)
*/
PriorityQueue<Object> que = new PriorityQueue<>(cmp);
比较器:
Comparator<Integer> cmp = new Comparator<Integer>() {
public int compare(Integer e1, Integer e2) {
//比较方法
return e2 - e1;
}
};
代码示例:
import java.util.Comparator;
import java.util.PriorityQueue;
public class TestPriorityQueue{
/**
* 写成静态方便试验时操作
*/
static Comparator<Test> cmp = new Comparator<Test>() {
@Override
public int compare(Test o1, Test o2) {
// TODO Auto-generated method stub
return o1.index-o2.index;
}
};
static PriorityQueue<Test> que = new PriorityQueue<>(cmp);
public static void main(String[] args) {
// TODO Auto-generated method stub
CreatElement();
System.out.println("输出元素数量:"+que.size());
System.out.println("是否包含:"+que.contains(que.peek()));
System.out.println("是否包含:"+que.contains(new Test(11)));
System.out.println("检索不弹出:"+que.peek().index);
/**
* 输出元素数量:10
* 是否包含:true
* 是否包含:false
* 检索不弹出:0
*/
while(!que.isEmpty())
{
System.out.println("检索并弹出:"+que.poll().index);
}
System.out.println("检索并弹出,此时为空队列:"+que.poll());
/**
* 检索并弹出:0
* 检索并弹出:1
* 检索并弹出:2
* 检索并弹出:3
* 检索并弹出:4
* 检索并弹出:5
* 检索并弹出:6
* 检索并弹出:7
* 检索并弹出:8
* 检索并弹出:9
* 检索并弹出,此时为空队列:null
*/
CreatElement();
while(!que.isEmpty())
{
System.out.println("移除并输出:"+que.remove().index);
}
/**
* 移除并输出:0
* 移除并输出:1
* 移除并输出:2
* 移除并输出:3
* 移除并输出:4
* 移除并输出:5
* 移除并输出:6
* 移除并输出:7
* 移除并输出:8
* 移除并输出:9
*/
}
/**
* 添加元素的方法
*/
public static void CreatElement()
{
for(int a=0;a<10;a++)
{
que.add(new Test(a));
}
}
}
class Test
{
public Test(int index){
this.index = index;
}
int index;
}