• 刷题upupup【Java中Queue、Stack、Heap用法总结】


    【Queue】

    先进先出(First-In-First-Out),LinkedList实现了Queue接口。它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

    add()       增加一个元索                     如果队列已满,则抛出一个IIIegaISlabEepeplian异常
    remove()   移除并返回队列头部的元素    如果队列为空,则抛出一个NoSuchElementException异常
    element()  返回队列头部的元素             如果队列为空,则抛出一个NoSuchElementException异常
    offer()       添加一个元素并返回true       如果队列已满,则返回false
    poll()         移除并返问队列头部的元素    如果队列为空,则返回null
    peek()       返回队列头部的元素             如果队列为空,则返回null
    put()        添加一个元素                      如果队列满,则阻塞
    take()        移除并返回队列头部的元素     如果队列为空,则阻塞

    boolean isEmpty() 判断队列是否为空

    size() 返回队列长度

    时间复杂度分析:

    O(1) Push / O(1) Pop / O(1) Top

    PriorityQueue

    默认为最小堆,可以用比较器构造最大堆

    PriorityQueue<Integer> maxHeap = new PriorityQueue<>(k, new Comparator<Integer>() {
        @Override
        public int compare(Integer o1, Integer o2) {
            return o2 - o1;
        }
    });

    【Stack】

    boolean empty() 测试堆栈是否为空。

    Object peek() 查看堆栈顶部的对象,但不从堆栈中移除它。

    Object push() 移除堆栈顶部的对象,并作为此函数的值返回该对象。

    Object pop() 把项压入堆栈顶部。

    时间复杂度:

    O(1) Push / O(1) Pop / O(1) Top

    【Heap】

    Heap 是一种二叉树(binary tree), 说得再准确一点, 它是一种完全二叉树(complete binary tree)。

    对于一个完全二叉树, 没有必要用常规的树结构(使用指针)来表示, 因为如果从上到下走过每层(每层内从左到右)给所有节点编号。(根节点的编号为0)的话, 完全二叉树有以下特征:father(i) = i/2 其中father(i)表示编号为i的节点的父节点的下标;leftchild(i) = i*2+1, rightchild(i) = i*2+2。所以使用数组就可以进行存储。

    最小堆:父结点的值小于两个左右结点的值;最大堆:父结点的值大于两个左右结点的值。

    复杂度总结:

    add - O(logN)

    poll - O(logN)

    top - O(1)

  • 相关阅读:
    TP5.1 分页CSS样式(转载)
    简单的layui二级联动
    关于layui部分表单不显示的问题(Select, checkBox)
    MySQL 开启远程访问权限 | 宝塔系统
    tp5.1 本地正常, 线上route.php不起作用的问题
    cocos自动图集
    微信小程序video
    nuxt https
    接口数据加密
    node里读取命令行参数
  • 原文地址:https://www.cnblogs.com/yidansheng/p/8255991.html
Copyright © 2020-2023  润新知