A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

在看JDK源码里优先级队列实现时,有个函数removeAt(int i)没弄懂,它删除优先级队列里下标为i的那个元素
private E removeAt(int i) {
        assert i >= 0 && i < size;
        modCount++;
        int s = --size;
        if (s == i) // removed last element
            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)
                    return moved;
            }
        }
        return null;
    }

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马