当前位置:   article > 正文

Java 优先队列 PriorityQueue_java优先队列默认是大顶堆吗

java优先队列默认是大顶堆吗

Java 优先队列 PriorityQueue

1. 声明

java 优先队列默认是小顶堆,小的先出队。

PriorityQueue<Integer> pq = new PriorityQueue<>();
  • 1

改成大的先出队:

PriorityQueue<Integer> pq = new PriorityQueue<>((a, b)->(b-a));
  • 1

按照其他规则出队:

 //将pair按照key从大到小排序,key相同情况下,按照value从小到大排序。
 PriorityQueue<Pair<Integer, Integer>> pq = new PriorityQueue<>(n, new Comparator<Pair<Integer, Integer>>() {
     public int compare(Pair<Integer, Integer> o1, Pair<Integer, Integer> o2) {
         if(o1.getKey() - o2.getKey() < 0) {
             return 1;
         } else if(o1.getKey() - o2.getKey() == 0){
             if(o1.getValue() - o2.getValue() < 0) {
                 return -1;
             } else {
                 return 1;
             }
         }
         return -1;
     }
 });
// 在数组情况下,pair的key为数组值,value为下标,
// 实现上述排序的一种巧妙做法。注:nums[] 为数组
PriorityQueue<Integer> pqMin = new PriorityQueue<>(new Comparator<Integer>() {
     public int compare(Integer o1, Integer o2) {
         if(nums[o1] - nums[o2] < 0) {
             return -1;
         } else if(nums[o1] - nums[o2] == 0){
             if(o1 - o2 < 0) {
                 return -1;
             }
         }
         return 1;
     }
 });
 PriorityQueue<Integer> pqMax = new PriorityQueue<>(new Comparator<Integer>() {
     public int compare(Integer o1, Integer o2) {
         if(nums[o1] - nums[o2] > 0) {
             return -1;
         } else if(nums[o1] - nums[o2] == 0){
             if(o1 - o2 > 0) {
                 return -1;
             }
         }
         return 1;
     }
 });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

2. 常用方法

public boolean add(E e); //在队尾插入元素,插入失败时抛出异常,并调整堆结构
public boolean offer(E e); //在队尾插入元素,插入失败时抛出false,并调整堆结构

public E remove(); //获取队头元素并删除,并返回,失败时前者抛出异常,再调整堆结构
public E poll(); //获取队头元素并删除,并返回,失败时前者抛出null,再调整堆结构

public E element(); //返回队头元素(不删除),失败时前者抛出异常
public E peek()//返回队头元素(不删除),失败时前者抛出null

public boolean isEmpty(); //判断队列是否为空
public int size(); //获取队列中元素个数
public void clear(); //清空队列
public boolean contains(Object o); //判断队列中是否包含指定元素(从队头到队尾遍历)
public Iterator<E> iterator(); //迭代器
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/355155
推荐阅读
相关标签
  

闽ICP备14008679号