当前位置:   article > 正文

优先队列中Comparator写法总结_siftupusingcomparator

siftupusingcomparator

PriorityQueue中Comparator的用法首先先看源码中的offer:

  1. public boolean offer(E e) {
  2. if (e == null)
  3. throw new NullPointerException();
  4. modCount++;
  5. int i = size;
  6. if (i >= queue.length)
  7. grow(i + 1);
  8. size = i + 1;
  9. if (i == 0)
  10. queue[0] = e;
  11. else
  12. siftUp(i, e);
  13. return true;
  14. }

1)if和else,分别执行对象判空和容量判断
2)执行siftUp(i, e),i是原有队列长度,e是要入队的元素。

  1. private void siftUp(int k, E x) {
  2. if (comparator != null)
  3. siftUpUsingComparator(k, x);
  4. else
  5. siftUpComparable(k, x);
  6. }

siftUp是堆中调整元素位置的一种方法,可以看出这里的优先队列是使用最大/最小堆实现的。

观察comparator不为空的情况:

k是原有队列长度,x是要入队的元素,e是父节点(也是最后一个非叶子结点)


                
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/355144
推荐阅读
相关标签
  

闽ICP备14008679号