您的位置:首页 > 理论基础 > 数据结构算法

共同学习Java源代码-数据结构-PriorityQueue类(六)

2018-01-19 07:20 405 查看
    publicint size() {        returnsize;}size方法返回size publicvoid clear() {        modCount++;        for (inti = 0; i < size; i++)            queue[i] = null;        size = 0;}
 
这个是清除所有元素的方法
修改次数自增
遍历数组 将每个元素置空
Size设为0
     @SuppressWarnings("unchecked")    public E poll() {        if (size == 0)            returnnull;        ints = --size;        modCount++;        E result = (E) queue[0];        E x = (E) queue[s];        queue[s] = null;        if (s != 0)            siftDown(0, x);        returnresult;
    }
这是将队列头部元素删除的方法
判断size为0 就返回空值
将size自减后赋给临时变量s 修改次数自增
获取数组第一个元素 赋给临时变量result
获取数组最有一个非空元素赋给临时变量x
将x对应的数组元素置空
判断s不为0 调用siftDown方法将数组调整其他元素
最后返回result
     @SuppressWarnings("unchecked")    private E removeAt(inti) {        modCount++;        ints = --size;        if (s == i)            queue[i] = null;        else {            E moved = (E) queue[s];            queue[s] = null;            siftDown(i, moved);            if (queue[i] == moved) {                siftUp(i, moved);                if (queue[i] != moved)                    returnmoved;            }        }        returnnull;
}
将指定下标处的元素删除的方法
修改次数自增
size自减值赋给临时变量s
判断如果s和参数下标相等 也就是要删除数组最后一个元素 就将最后一个元素置空
如果要删除的不是数组最后一个非空元素 就获取数组最后一个非空元素 并将数组最后一个非空元素置空 调用siftDown方法调整元素 调整后判断如果参数下标处的元素为刚才的最后一个非空元素 就调用siftUp方法继续调整 再判断调整后参数下标处的元素不是最初那个最后一个非空元素了 就返回刚才那个最后一个非空元素
跳出判断 返回空 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: