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

    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方法继续调整 再判断调整后参数下标处的元素不是最初那个最后一个非空元素了 就返回刚才那个最后一个非空元素

跳出判断 返回空 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值