【数据结构】堆的初始化——如何初始化一个大根堆?
文章目录
- 源码是如何插入的?
- 扩容
- 向上调整
- 实现大根堆
- 代码:
源码是如何插入的?

扩容

在扩容的时候,如果容量小于64,那就2倍多2的扩容;如果大于64,那就1.5倍扩容。
还会进行溢出的判断,如果决定的新容量大于给的数组最大容量,那就将其限制在数组最大容量:
向上调整

在进行向上调整的时候,会对传进来的comparator进行判断,如果不为空,那就使用程序员传进来的比较器接口,如果为空,那就说明调用者并未实现比较器,那么就使用java自己提供的函数
siftUpComparable(k, x);
传进来的x就是要插入的值e。

这是使用程序员自己传进来的比较器进行比较,调用了compare接口进行比较,所以要想初始化一个大根堆,那就得自己写出一个compare函数然后传进去。

在使用自己写的compare函数时,会让x强转为Comparable类型,如果这个x不是可以比较的(未实现Comparable接口,那就会抛出类型转换异常)
实现大根堆
值得说明的是:
比较器函数是Comparator而不是Comparable。
代码:
import java.util.Comparator;
import java.util.PriorityQueue;class IntCmp implements Comparator<Integer> {@Overridepublic int compare(Integer o1, Integer o2) {// 当然,写o1.compareTo(o2)仍然是小根堆return o2.compareTo(o1);}
}public class Test {public static void main(String[] args) {PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();priorityQueue.offer(1);priorityQueue.offer(2);priorityQueue.offer(3);priorityQueue.offer(4);System.out.print(priorityQueue.poll());System.out.print(priorityQueue.poll());System.out.print(priorityQueue.poll());System.out.println(priorityQueue.poll());// 1 2 3 4,可以发现java中提供的默认堆是小根堆System.out.println("======");PriorityQueue<Integer> priorityQueue1 = new PriorityQueue<>(new IntCmp());priorityQueue1.offer(1);priorityQueue1.offer(2);priorityQueue1.offer(3);priorityQueue1.offer(4);System.out.print(priorityQueue1.poll());System.out.print(priorityQueue1.poll());System.out.print(priorityQueue1.poll());System.out.print(priorityQueue1.poll());// 4 3 2 1,变为大根堆}
}
相关文章:
【数据结构】堆的初始化——如何初始化一个大根堆?
文章目录 源码是如何插入的?扩容向上调整实现大根堆代码: 源码是如何插入的? 扩容 在扩容的时候,如果容量小于64,那就2倍多2的扩容;如果大于64,那就1.5倍扩容。 还会进行溢出的判断,…...
【韩顺平 零基础30天学会Java】程序流程控制(2days)
day1 程序流程控制:顺序控制、分支控制、循环控制 顺序控制:从上到下逐行地执行,中间没有任何判断和跳转。 Java中定义变量时要采用合法的前向引用。 分支控制if-else:单分支、双分支和多分支。 单分支 import java.util.Scann…...
从入门到精通Python隧道代理的使用与优化
哈喽,Python爬虫小伙伴们!今天我们来聊聊如何从入门到精通地使用和优化Python隧道代理,让我们的爬虫程序更加稳定、高效!今天我们将对使用和优化进行一个简单的梳理,并且会提供相应的代码示例。 1. 什么是隧道代理&…...
19万字智慧城市总体规划与设计方案WORD
导读:原文《19万字智慧城市总体规划与设计方案WORD》(获取来源见文尾),本文精选其中精华及架构部分,逻辑清晰、内容完整,为快速形成售前方案提供参考。 感知基础设施 感知基础设施架构由感知范围、感知手…...
[赛博昆仑] 腾讯QQ_PC端,逻辑漏洞导致RCE漏洞
简介 !! 内容仅供学习,请不要进行非法网络活动,网络不是法外之地!! 赛博昆仑是国内一家较为知名的网络安全公司,该公司今日报告称 Windows 版腾讯 QQ 桌面客户端出现高危安全漏洞,据称“黑客利用难度极低、危害较大”,腾讯刚刚已经紧急发布…...
python Requests
Requests概述 官方文档:http://cn.python-requests.org/zh_CN/latest/,Requests是python的HTTP的库,我们可以安全的使用 Requests安装 pip install Requests -i https://pypi.tuna.tsinghua.edu.cn/simple Requests的使用 Respose的属性 属性说明url响…...
【深入解析:数据结构栈的魅力与应用】
本章重点 栈的概念及结构 栈的实现方式 数组实现栈接口 栈面试题目 概念选择题 一、栈的概念及结构 栈:一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶,另一端称为栈底。栈中的数…...
安卓机显示屏的硬件结构
显示屏的硬件结构 显示屏的硬件结构主要由背光源、液晶面板和驱动电路构成。可以将液晶面板看成一个三明治的结构,即在两片偏振方向互相垂直的偏光片系统中夹着一层液晶层。自然光源通过起偏器(偏光片之一)后,变成了垂直方向的偏…...
基于swing的超市管理系统java仓库库存进销存jsp源代码mysql
本项目为前几天收费帮学妹做的一个项目,Java EE JSP项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 基于swing的超市管理系统 系统有3权限:管…...
常用系统命令
重定向 cat aa.txt > bbb.txt 将输出定向到bbb.txt cat aaa.txt >> bbb.txt 输出并追加查看进程 ps ps -ef 显示所有进程 例⼦:ps -ef | grep mysql |:管道符 kill pid 结束进程, 如 kill 3732;根据进程名结束进程可以先…...
【Spring专题】Spring之Bean生命周期源码解析——阶段四(Bean销毁)(拓展,了解就好)
目录 前言阅读建议 课程内容一、Bean什么时候销毁二、实现自定义的Bean销毁逻辑2.1 实现DisposableBean或者AutoCloseable接口2.2 使用PreDestroy注解2.3 其他方式(手动指定销毁方法名字) 三、注册销毁Bean过程及方法详解3.1 AbstractBeanFactory#requir…...
配置Docker,漏洞复现
目录 配置Docker 漏洞复现 配置Docker Docker的配置在Linux系统中相对简单,以下是详细步骤: 1.安装Docker:打开终端,运行以下命令以安装Docker。 sudo apt update sudo apt install docker.io 2.启动Docker服务:运…...
微信小程序 游戏水平评估系统的设计与实现_pzbe0
近年来,随着互联网的蓬勃发展,游戏公司对信息的管理提出了更高的要求。传统的管理方式已无法满足现代人们的需求。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,随着各行业的不断发展,使命召…...
moba登录不进去提示修改问题问题解决方式
问题: 安装moba后,运行时运行不起来,提示输入密码,安装、卸载多个版本都不行 方法: 使用ResetMasterPassword工具进行重置主密码 官网下载地址: MobaXterm Xserver and tabbed SSH client - resetmaster…...
Unsafe upfileupload
文章目录 client checkMIME Typegetimagesize 文件上传功能在web应用系统很常见,比如很多网站注册的时候需要上传头像、上传附件等等。当用户点击上传按钮后,后台会对上传的文件进行判断 比如是否是指定的类型、后缀名、大小等等,然后将其按…...
机器人制作开源方案 | 滑板助力器
我们可以用一块废滑板做些什么呢? 如今,越来越多的人选择电动滑板作为代步工具或娱乐方式,市场上也涌现出越来越多的电动滑板产品。 (图片来源:Backfire Zealot X Belt Drive Electric Skateboard– Backfire Board…...
飞机打方块(二)游戏界面制作
一、背景 1.新建bg节点 二、飞机节点功能实现 1.移动 1.新建plane节点 2.新建脚本GameController.ts,并绑定Canvas GameControll.ts const { ccclass, property } cc._decorator;ccclass export default class NewClass extends cc.Component {property(cc.Node)canvas:…...
自我理解:精度(precision)和召回(recall)
1、精度(precision) 精度是用于评估分类模型的一个重要指标。它反映了模型预测为正例的样本中,实际真正为正例样本的比例。 【注】正例样本指在二分类问题中,被标注为正类的样本。 例如:在垃圾邮件分类任务中,正例样本就是真实的…...
Nginx 使用 HTTPS(准备证书和私钥)
文章目录 Nginx生成自签名证书和配置Nginx HTTPS(准备证书和私钥)准备证书和私钥 Nginx生成自签名证书和配置Nginx HTTPS(准备证书和私钥) 准备证书和私钥 生成私钥 openssl genrsa -des3 -out server.key 2048这会生成一个加密…...
Java:集合框架:Set集合、LinkedSet集合、TreeSet集合、哈希值、HashSet的底层原理
Set集合 创建一个Set集合对象,因为Set是一个接口不能直接new一个对象,所以要用一个实现类来接 HashSet来接 无序性只有一次,只要第一次运行出来后,之后再运行的顺序还是第一次的顺序。 用LinkedSet来接 有序 不重复 无索引 用Tree…...
视频怎么去水印?视频去水印软件哪个好用?2026实测方法盘点
视频怎么去水印?视频去水印软件哪个好用?2026实测方法盘点 刷到一条好视频想保存下来,打开相册发现角落里有个大水印,二次使用直接废了。做自媒体的更懂这种痛:从各个平台扒下来的素材,水印各不相同&#x…...
C语言程序设计核心详解 第十章:位运算和c语言文件操作详解_文件操作函数
位运算和c语言文件操作详解1. 位运算位运算的操作对象只能是整型或字符型数据C语言提供6种位运算符:& 按位与| 或^ 异或~ 取反<< 左移>> 右移复合赋值运算符:&,| ,^,<<,>>1.1 按位与运算代码语言:cAI代码解释1&11 全…...
对比直接使用厂商API体验Taotoken聚合接入的价值
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用厂商API体验Taotoken聚合接入的价值 在开发基于大模型的应用时,许多团队和个人开发者都曾面临一个选择&am…...
如何快速解锁QQ音乐加密格式:高效智能的完整解决方案
如何快速解锁QQ音乐加密格式:高效智能的完整解决方案 【免费下载链接】QMCDecode QQ音乐QMC格式转换为普通格式(qmcflac转flac,qmc0,qmc3转mp3, mflac,mflac0等转flac),仅支持macOS,可自动识别到QQ音乐下载目录,默认转…...
观察taotoken平台在多模型聚合调用下的路由稳定性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察 Taotoken 平台在多模型聚合调用下的路由稳定性 在构建依赖大模型能力的生产应用时,服务的持续可用性是核心诉求之…...
手把手教你用88E1111 PHY芯片搞定百兆以太网硬件设计(附MII接口配置避坑指南)
手把手教你用88E1111 PHY芯片实现百兆以太网硬件设计实战指南 在嵌入式系统和工业控制领域,百兆以太网仍然是可靠且经济高效的网络解决方案。Marvell的88E1111 PHY芯片凭借其稳定性和灵活性,成为众多硬件工程师的首选。本文将从一个实际项目开发者的视角…...
MediaCreationTool.bat:从零到精通的Windows系统部署革命
MediaCreationTool.bat:从零到精通的Windows系统部署革命 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat 你…...
AI工具搭建自动化视频生成访问控制
# AI工具搭建自动化视频生成访问控制:从实战出发的理解 这东西到底是什么 前阵子有个朋友问我,他公司要做一批产品演示视频,每天几百个,人工做肯定不行。但问题是这些视频包含客户特定信息,不能所有人都能访问。这时候…...
Minitab(统计分析软件) 22.5
Minitab是一款广受欢迎的统计分析和质量控制软件,特别适用于质量改进和六西格玛管理方法。作为 OMNITAB 的简化版,Minitab 提供了一个功能强大而简洁易用的统计分析平台,帮助用户进行数据处理、计算、分析、报告生成等工作。其强大的统计过程…...
初创公司如何利用Taotoken的Token Plan套餐控制AI开发成本
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初创公司如何利用Taotoken的Token Plan套餐控制AI开发成本 对于预算敏感的初创公司而言,将大模型能力集成到产品原型中…...

