刷题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)
刷题upupup【Java中Queue、Stack、Heap用法总结】的更多相关文章
- 牛客网刷题(纯java题型 31~60题)
牛客网刷题(纯java题型 31~60题) 重写Override应该满足"三同一大一小"三同:方法名相同,参数列表相同,返回值相同或者子类的返回值是父类的子类(这一点是经过验证的) ...
- 牛客网刷题(纯java题型 1~30题)
牛客网刷题(纯java题型 1~30题) 应该是先extend,然后implement class test extends A implements B { public static void m ...
- Java中的Socket的用法
Java中的Socket的用法 Java中的Socket分为普通的Socket和NioSocket. 普通Socket的用法 Java中的 ...
- Java中Date各种相关用法
Java中Date各种相关用法(一) 1.计算某一月份的最大天数 Java代码 Calendar time=Calendar.getInstance(); time.clear(); time.set ...
- JAVA中enum的常见用法
JAVA中enum的常见用法包括:定义并添加方法.switch.遍历.EnumSet.EnumMap 1.定义enum并添加或覆盖方法 public Interface Behaviour{ void ...
- 巨人大哥谈Java中的Synchronized关键字用法
巨人大哥谈Java中的Synchronized关键字用法 认识synchronized 对于写多线程程序的人来说,经常碰到的就是并发问题,对于容易出现并发问题的地方价格synchronized基本上就 ...
- Java中Class类及用法
Java中Class类及用法 Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识,即所谓的RTTI.这项信息纪录了每个对象所属的类.虚拟机通常使用运行时类型信息选准正确方 ...
- JAVA中mark()和reset()用法
根据JAVA官方文档的描述,mark(int readlimit)方法表示,标记当前位置,并保证在mark以后最多可以读取readlimit字节数据,mark标记仍有效.如果在mark后读取超过rea ...
- java中class,public的用法
java中class,public的用法 一.Java访问权限饰词(access specifiers) Java有public.protect.friendly.private四种访问权限,并且这四 ...
- java中堆栈(stack)和堆(heap)(还在问静态变量放哪里,局部变量放哪里,静态区在哪里.....进来)
(1)内存分配的策略 按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编 译时就可以给 ...
随机推荐
- 用python写栈
class StackFullError(Exception): pass class StackEmptyError(Exception): pass class Stack: def __init ...
- DataGridView 列排序 内存表查找
DataRow[] drow = dt.Select("列名 = 列名的值" ); 就这句话,dt是一个datatable 且断点调试时能看到里面有trade这个列,可为什么执行到 ...
- JAVA课堂测试之一位数组可视化
代码: package test;//求最大子数组 import java.util.Scanner; import javax.swing.JOptionPane; public class shu ...
- 遗传算法(Genetic Algorithm, GA)及MATLAB实现
遗传算法概述: • 遗传算法(Genetic Algorithm,GA)是一种进化算法,其基本原理是仿效生物界中的“物竞天择.适者生存”的演化法则,它最初由美国Michigan大学的J. Hollan ...
- 高版本mysql8.0解压版安装步骤
解压版安装操作官网下载: mysql-installer-community-8.0.12.0.msi如上操作: http://www.cnblogs.com/elfin/p/9429877.html ...
- Java基础实训2
1. 一维数组的创建和遍历. 声明并创建存放4个人考试成绩的一维数组,并使用for循环遍历数组并打印分数.要求: (1) 首先按“顺序”遍历,即打印顺序为:从第一个人到第四个人: (2) ...
- Android中的广播基本实现及回调方法的理解
在Android中broadcast这一节的内容其实不算多主要是牵扯到一个broadcastreceiver类,这个类是一个抽象类,下面有一个抽象方法onreceiver(),可以再我们收到网络状态变 ...
- (转)AutoML for Data Augmentation
AutoML for Data Augmentation 2019-04-01 09:26:19 This blog is copied from: https://blog.insightdatas ...
- company_credit
/** * Created by wu-yj on 2016/5/6. */ import java.sql.{Connection, DriverManager, PreparedStatement ...
- B/S架构
B/S架构即浏览器和服务器架构模式.它是随着Internet技术的兴起,对C/S架构的一种变化或者改进的架构.在这种架构下,用户工作界面是通过WWW浏览器来实现,极少部分事务逻辑在前端(Browser ...