LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 175|回复: 0

PriorityQueue - remove(Object o)

[复制链接]
发表于 2023-12-21 17:48:44 | 显示全部楼层 |阅读模式

remove(Object o)

remove(Object o)方法用于删除队列中跟o相等的某一个元素(如果有多个相等,只删除一个),该方法不是Queue接口内的方法,而是Collection接口的方法。由于删除操作会改变队列结构,所以要进行调整;又由于删除元素的位置可能是任意的,所以调整过程比其它函数稍加繁琐。具体来说,remove(Object o)可以分为2种情况: 1. 删除的是最后一个元素。直接删除即可,不需要调整。2. 删除的不是最后一个元素,从删除点开始以最后一个元素为参照调用一次siftDown()即可。此处不再赘述。



具体代码如下:

//remove(Object o)
public boolean remove(Object o) {
        //通过遍历数组的方式找到第一个满足o.equals(queue)元素的下标
    int i = indexOf(o);
    if (i == -1)
        return false;
    int s = --size;
    if (s == i) //情况1
        queue = null;
    else {    E moved = (E) queue;
        queue = null;
        siftDown(i, moved);//情况2
        ......
    }
    return true;
}
------
原文链接:https://pdai.tech/md/java/collection/java-collection-PriorityQueue.html

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表