写点什么

PriorityQueue 源码解析 (三)

作者:知识浅谈
  • 2022-10-17
    吉林
  • 本文字数:1239 字

    阅读完需:约 1 分钟


🍁 作者:知识浅谈,CSDN 博客专家,阿里云签约博主,InfoQ 签约博主,华为云云享专家

📌 擅长领域:全栈工程师、爬虫、ACM 算法

💒 公众号:知识浅谈


PriorityQueue 源码解析(三)总结


正菜来了⛳⛳⛳

🎈PriorityQueue 源码中的函数

🍮boolean add(E e)

含义:见名知意,这个是向优先队列中添加元素,函数中调用了 offer 函数进行添加,我们接着看 offer 这个函数。


public boolean add(E e) {     return offer(e);}
复制代码

🍮boolean offer(E e)

含义:将指定元素插入此优先级队列。


  1. 集体的操作通过下边的函数可以看出先判度 e 是不是为 null,如果是的话,就抛出异常。

  2. 其次是判断优先队列中的元素个数 size 是不是大于底层数组 queue 的大小,如果大于就需要扩容了,调用 grow 函数进行扩容。如果小于的话就在数组最后添加元素,并调整堆中的数据。


public boolean offer(E e) {  if (e == null)        throw new NullPointerException();    modCount++;    int i = size;    if (i >= queue.length)        grow(i + 1);    size = i + 1;    if (i == 0)        queue[0] = e;    else        siftUp(i, e);    return true;}
复制代码

🍮 E peek()

含义: 返回堆中第一个元素,也就是返回队列中的队首元素。


public E peek() {    return (size == 0) ? null : (E) queue[0];}
复制代码

🍮 int indexOf(Object o)

含义: 见名知意,这个就是在队列中查找指定的对象的位置,注意这个使用的是 equals,而不是直接比较,因为直接比较比较的是引用值,使用 equals 比较的是具体的值。


    private int indexOf(Object o) {        if (o != null) {            for (int i = 0; i < size; i++)                if (o.equals(queue[i]))                    return i;        }        return -1;    }
复制代码

🍮boolean remove(Object o)

含义:这个函数的意思就是移除指定的对象,从下边的函数可以看出先通过 indexOf 查找对象是否在队列中,如果不在,直接返回 false,在的话会调用 removeAt(i)移除 i 这个位置的元素,因为 i 是 indexOf 查出的对象 o 在队列中的位置。


public boolean remove(Object o) {        int i = indexOf(o);        if (i == -1)            return false;        else {            removeAt(i);            return true;        }    }
复制代码

🍮boolean removeEq(Object o)

含义:这个函数的含义和 remove 差不多,有一些区别就是这个比较的时候是直接比较的引用,而不是使用 equals 比较的具体的值,上边的那个函数实现调用的 indexof(o)查找的 o 对象的位置,这个是直接进行比较的引用。


 boolean removeEq(Object o) {     for (int i = 0; i < size; i++) {         if (o == queue[i]) {             removeAt(i);             return true;         }     }     return false; }
复制代码


上边的两个函数中都提到 removeAt 这个函数了,具体的这个函数的内部的相关操作,我们下篇文章中深入探析。

🍚总结

以上就是关于 PriorityQueue 源码部分函数的相关解析,希望有所帮助。Written By 知识浅谈

发布于: 刚刚阅读数: 7
用户头像

知识浅谈

关注

公众号:知识浅谈 2022-06-22 加入

🍁 作者:知识浅谈,InfoQ签约作者,CSDN博客专家/签约讲师,华为云云享专家,阿里云签约博主,51CTO明日之星 📌 擅长领域:全栈工程师、爬虫、ACM算法 💒 公众号:知识浅谈 🔥 联系方式vx:zsqtcc

评论

发布
暂无评论
PriorityQueue 源码解析(三)_Priority Queue_知识浅谈_InfoQ写作社区