java常用类-优先级队列PriorityQueue
看文档
实现了四个接口Serializable , Iterable
序列化,可迭代,是个Collection类型的集合,队列性质,是一点多余的东西都没有啊
但是,线程不安全!!!
使用方法:同一般集合
但是每次队头出来的都是高优先级元素,那既然是优先级了,就必须有依据标准:怎么排序,通过构造方法提供排序依据(Comparator接口)
0.构造方法
a.空参构造:具有默认的初始容量(11),根据它们的natural ordering对其元素进行排序 。
b.PriorityQueue(int initialCapacity) 设置初始容量
c.PriorityQueue(Comparator<? super E> comparator)
创建具有默认初始容量的 PriorityQueue ,并根据指定的比较器对其元素进行排序。
d....
例如:
PriorityQueue pq=new PriorityQueue<>(new Comparator(){
@Override
public int compare(LinkNode l1, LinkNode l2) {
return (int)(l1.val-l2.val);
}
});
1.插入元素:
boolean add(E e)
boolean offer(E e)
区别:
区别是没有区别
底层
public boolean add(E e) {
return offer(e);
}
/**
* Inserts the specified element into this priority queue.
*
* @return {@code true} (as specified by {@link Queue#offer})
* @throws ClassCastException if the specified element cannot be
* compared with elements currently in this priority queue
* according to the priority queue's ordering
* @throws NullPointerException if the specified element is null
*/
public boolean offer(E e) {
if (e == null)
throw new NullPointerException();
modCount++;
int i = size;
if (i >= queue.length)
grow(i + 1);
siftUp(i, e);
size = i + 1;
return true;
}
2.peek()
检索但不删除此队列的头,如果此队列为空,则返回 null 。
3.poll()
检索并删除此队列的头,如果此队列为空,则返回 null 。
4.remove(Object o)
从该队列中删除指定元素的单个实例(如果存在)。