优先级队列(堆)

 日升时奋斗,日落时自省

目录

一、回顾

习题一:

习题二:

 习题三:

 习题四:

二、接口使用

2.1PriorityQueue的特性

 2.2接口涉及的引用类

  2.3接口涉及的包装类

一、回顾

习题一:

1.下列关键字序列为堆的是:(A)
A: 100,60,70,50,32,65 B: 60,70,65,50,32,100 C: 65,100,70,32,50,60
D: 70,65,100,32,50,60 E: 32,50,100,70,65,60 F: 50,100,70,65,60,32

解题:堆分为大根堆和小根堆

这里就不解释那么多的图,上一个博客已经解释什么是大根堆

 其余的可以自己尝试画图,是否满足;

习题二:

2.已知小根堆为8,15,10,21,34,16,12,删除关键字8之后需重建堆,在此过程中,关键字之间的比较次数是(C)
A: 1 B: 2 C: 3 D: 4

 习题三

3.一组记录排序码为(5 11 7 2 3 17),则利用堆排序方法建立的初始堆为(D)
A: (11 5 7 2 3 17) B: (11 5 7 2 17 3) C: (17 11 7 2 3 5)
D: (17 11 7 5 3 2) E: (17 7 11 3 5 2) F: (17 7 11 3 2 5)

 习题四:

4.最小堆[0,3,2,5,7,4,6,8],在删除堆顶元素0之后,其结果是(C
A: [3,2,5,7,4,6,8] B: [2,3,5,7,4,6,8]
C: [2,3,4,5,7,8,6] D: [2,3,4,5,6,7,8]

二、接口使用


2.1PriorityQueue的特性

java集合框架中PriorityQueue和PriorityBlockingQueue两种类型的优先级队列。

PriorityQueue是线程不安全的,PriorityBlockingQueue是线程安全的

 

 2.2接口涉及的引用类

优先级队列的底层是一个小根堆

class Student implements Comparable<Student>{

    public int age;
    public Student(int age){
        this.age=age;
    }
    @Override
    public int compareTo(Student o) {
        return this.age-o.age;
    }
}

 如何将这个代码改为一个大根堆,其实很简单,这里的comparaTo方法中改为o.age-this.age

代码解释:

  2.3接口涉及的包装类

包装类不是引用类,比较的话就需要实现比较器,其实刚刚看到的地方有一个if语句没有执行,它就是这里的关键(图解)

 我们知道这里是小根堆,那想改成大根堆就需要改原码,改原码我们是做不到的,但是我们可以写一个比较器

 变成大根堆与前面的相似 比较器方法改为   o2-o1

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值