java有关于优先级队列和Map/Set的一些知识点

本文介绍了Java中的优先级队列,重点讲解了优先级队列的动态顺序特性和如何通过Comparator实现最小堆到最大堆的转换。此外,文章还探讨了在不同场景下使用堆来解决选前N个数的问题。在Map和Set部分,解释了它们的用途,如Set用于去重,Map用于存储键值对,并对比了HashMap、TreeMap和LinkedHashMap的特点和使用场景。
摘要由CSDN通过智能技术生成

一:优先级队列

优先级对列:按照元素之间的大小动态顺序出队,优先级队列处理的元素个数是动态变化的,有进有出,不像排序处理的集合个数是固定的.

JDK中的优先级队列默认是最小堆,所以需要我们去修改compareTo方法.

有时候在不同的场景下,对升序和降序都有要求,频繁根据不同场景修改已经写好的代码是大忌,所以我们使用Comparator比较器.

Comparator比较器:需要比较的类并不需要实现此接口,而是有一个专门的类实现此接口,这个类就是为了进行比较大小用的.使用Comparator来讲JDK的最小堆改造为最大堆使用

一般遇到从一堆数据中选出前**个数,应用堆来解决问题(取大用小,取小用大)

堆排序:

以最大堆为例,依次取出最大值直到堆为空,得到一个降序数组 => 无法在原数组上进行排序,还得创建一个和当前数组大小相同的堆 => 空间复杂度O(N)

1.任意数组都可以heapify => 调整为最大堆

i = arr.length;i>0;i++

2.再次遍历这个最大堆,swap(0,i) =>每当进行一次swap操作,就把当前堆的最大值交换到最终位置.

二:Map/Set

set :存储不重复的key值,使用set集合来进行去重处理

map:存储的是key==value键值对,若需要根据key找到对应的value使用map集合

在HaspMap中,元素的插入顺序和保存之后的顺序无关,若需要插入和保存顺序相同,使用LinkedHashMap

1.HashMap是基于哈希表 + 红黑树的结构(JDK8之后),HashMap的元素保存顺序与插入顺序无关,key和value都可以为null;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值