0
点赞
收藏
分享

微信扫一扫

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

若如初梘 2022-03-11 阅读 78
java

一:优先级队列

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

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;

2.TreeMap是基于红黑树的结构,TreeMap的元素保存顺序与元素的插入顺序也无关,key不能为null,value可以为null.使用TreeMap保存元素时,元素必须是Comparable子类或者传入比较器.

3.LinkedHahMap就是在HashMap的基础上维护了一个链表来记录元素的插入先后,可以按照元素的插入顺序来保存元素.

Set集合:去重

遍历set集合,直接使用for-each循环即可.

遍历map集合的时候,需要将Map->Set进行for-each遍历,for(Map.entry<具体类型> entry:map.entrySet())

举报

相关推荐

0 条评论