java的优先级队列PriorityQueue

  1. 介绍
    Java中PriorityQueue通过二叉小顶堆实现,可以用一棵完全二叉树表示。
    一个基于优先级堆的无界优先级队列。优先级队列的元素按照其自然顺序进行排序,或者根据构造队列时提供的 Comparator 进行排序,具体取决于所使用的构造方法。优先级队列不允许使用 null 元素。依靠自然顺序的优先级队列还不允许插入不可比较的对象(这样做可能导致 ClassCastException)。

  2. 构造方法:

  1. PriorityQueue() :使用默认的初始容量(11)创建一个优先级队列,并按其自然顺序进行排序
  2. PriorityQueue(int initialCapacity, Comparator comparator) 使用指定的初始容量创建一个 PriorityQueue,并根据指定的比较器对元素进行排序。

举例:

PriorityQueue<Integer> q = new PriorityQueue<>();
PriorityQueue<Integer> q = new PriorityQueue<>(11,new Comparator<Integer>(){
     
	@Override
	public int compare(Integer o1,Integer o2){
     
		return o2 - o1;//逆序
	}
});
或者写成Lambda表达式的形式
PriorityQueue<Integer> q = new PriorityQueue<>((a,b)->b-a);
  1. 方法摘要
  1. boolean add(E e) 将指定的元素插入此优先级队列。
  2. boolean offer(E e) 将指定的元素插入此优先级队列。
  3. E peek() 获取但不移除此队列的头;如果此队列为空,则返回 null。
  4. E poll() 获取并移除此队列的头,如果此队列为空,则返回 null。
  5. int size() 返回此 collection 中的元素数。
  6. void clear() 从此优先级队列中移除所有元素。
  7. boolean contains(Object o) 如果此队列包含指定的元素,则返回 true。

举例:

public static void main(String[] args) {
     
        PriorityQueue<Integer> q = new PriorityQueue<>();
        q.add(1);
        q.add(3);
        q.offer(2);
        q.offer(4);
        System.out.println("优先级队列的大小"+q.size());
        System.out.println("优先级队列的顶部"+q.peek());
        System.out.println("遍历优先队列");
        Iterator<Integer> iter = q.iterator();
        while (iter.hasNext()) {
     
            System.out.println(iter.next());
        }
        System.out.println("获取优先级队列的顶部并弹出"+q.poll());
        }

java的优先级队列PriorityQueue_第1张图片

你可能感兴趣的:(刷题笔记,java,PriorityQueue)