算法解题可能会用到的知识/方法

本文介绍了Java中的PriorityQueue(优先级队列)概念,包括其底层二叉堆结构、常用方法如add、offer、peek和poll,以及如何利用Map(如HashMap)进行getOrDefault和computeIfAbsent操作。同时涵盖了字符串处理和List的基本操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Math

  • Math.sqrt(xx)
    对xx进行开方

String

  • charAt(xx)
    xx字母在字符串中的位置
  • compareTo(xx)
    比较两个字符串首字母的字典顺序大小,如果首字母相同则会比较第二个字母,以此类推
  • xx.toCharArray
    将字符串转为字符数组
  • xx.indexOf(char c, int i)
    返回c在字符串xx上的位置,找不到则返回-1

PriorityQueue

PriorityQueue(优先级队列):在Java1.5中引入。PriorityQueue是基于优先堆的一个无界队列,这个优先队列中的元素可以默认自然排序或者通过提供的Comparator(比较器)在队列实例化的时排序。要求使用Java Comparable和Comparator接口给对象排序,并且在排序时会按照优先级处理其中的元素。

数据结构
优先级队列底层的数据结构其实是一颗二叉堆
在这里插入图片描述
(1)二叉堆是一个完全二叉树
(2)根节点总是大于左右子节点(大顶堆),或者是小于左右子节点(小顶堆)。

  • add(xx) 和 offer(xx)
    都是往优先队列中插入元素,add(xx) 方法插入元素失败时会抛出异常,offer(xx) 插入元素失败时会返回false
    在这里插入图片描述

  • element() 和 peek()
    都是获取元素但不删除队列首元素,也就是队列中权值最小的元素。element()会抛出异常,peek()会返回null。
    在这里插入图片描述

  • remove() 和 poll()
    都是获取元素并删除队列首元素。remove()会抛出异常,poll()会返回null。
    在这里插入图片描述

  • remove(Object o)
    用于删除队列中的指定元素(如果队列中有多个相同元素,只删除一个),由于删除操作会改变队列结构,所以要进行调整;又由于删除元素的位置可能是任意的,所以调整过程比其它函数稍加繁琐。
    在这里插入图片描述
    在这里插入图片描述

  • indexOf(Object o):查询对象o的索引

  • contain(Object o):判断是否容纳了元素

Map

  • hashmap.getOrDefault(Object key, V defaultValue)
    获取指定 key 对应对 value,如果找不到 key ,则返回设置的默认值defaultValue。
  • hashmap.computeIfAbsent(K key, Function remappingFunction)
    如果 key 对应的 value 不存在,则使用获取 remappingFunction 重新计算后的值,并保存为该 key 的 value,否则返回 value。

List

  • arraylist.subList(int fromIndex, int toIndex)
    用于截取并返回动态数组中的起始位置(包含该索引位置)到结束位置(不包含该索引位置)的那一部分。
  • void add(int index,E element)
    用于在列表的指定位置插入指定元素,并将当前处于该位置的元素及其后续元素的索引加 1。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值