Queue用于创建模拟队列这种数据结构,Queue接口中定义了如下几种方法:
方法
- void add(Object e):将指定元素加入此队列的尾部
- boolean offer(Object e):将指定元素加入此队列的尾部。当使用有容量限制的队列时,此方法更好用些。
- Object element():获取队列头部的元素,但是不删除该元素
- Object peek():获取队列头部的元素,但是不删除该元素。如果此队列为空,则返回null
- Object poll():获取队列头部的元素,并删除该元素。如果此队列为空,则返回null
Object remove():获取队列头部的元素,并删除该元素。
PriorityQueue实现类:
PriorityQueue是一个比较标准的队列实现类,因为PriorityQueue保存队列元素的顺序不是按照加入队列的顺序,而是按照元素的大小进行重新排序。
PriorityQueue不允许插入null元素,他还需要对队列元素进行排序,PriorityQueue有两种排序方式:自然排序:
采用自然顺序的PriorityQueue集合中的元素必须实现了Comparable接口,而且应该是统一个类的多个实例,否则可能导致ClassCastException异常
PriorityQueue pq = new PriorityQueue();
pq.offer(6);
pq.offer(-9);
pq.offer(20);
pq.offer(18);
System.out.println(pq);
System.out.println(pq.poll());
System.out.println(pq);
System.out.println(pq.poll());
System.out.println(pq);
System.out.println(pq.poll());
System.out.println(pq);
System.out.println(pq.poll());
System.out.println(pq);
定制排序
创建PriorityQueue队列时,传入一个Comparator对象,该对象负责对元素进行排序操作,此时不要求队列元素实现Comparable接口
PriorityQueue pq = new PriorityQueue((o1,o2) ->
{
int m1 = (int)o1;
int m2 = (int)o2;
return m1>m2?-1:m1<m2?1:0;
});
pq.offer(6);
pq.offer(-9);
pq.offer(20);
pq.offer(18);
System.out.println(pq);