这个泛型堆队列相关类,是继承IComparabled,用来数据比较,参考[[IComparable接口]],用Lst队列容器,存放堆数据; 构造函数中,实例化一个容量4的队列即可; ![[Pasted image 20240403171845.png]] 比较之后,根据大小,会进行数据位置变换,使用Swap完成即可 ![[Pasted image 20240403172023.png]] 这俩接口,HeapfiyUp是通过CompareTo把比较最大值放到堆顶端; HeapfiyDown是在topIndex索引,和endIndex索引之间,重新排序,把比较最小值,放到堆底端; 因为会有,在堆里移除某个索引数据的Remove逻辑,所以移除之后,也需要HeapfiyDown,对剩余的堆进行重新排序; ![[Pasted image 20240403172144.png]] 移除某个index索引节点的逻辑 ![[Pasted image 20240403173332.png]] Peek是拿到堆0索引的数据,但是不移除队列,IndexOf是基于item元素,拿到它在队列中的索引信息 ![[Pasted image 20240403173407.png]] 几个函数接口,分别是移除item,清空队列,检测是否包含item,队列判空,数组转换,参考[[List的toArray()方法]] ![[Pasted image 20240403173545.png]] 进出队列 ![[Pasted image 20240403173656.png]] 测试逻辑,Item类,也是继承自IComparabled数据比较,其中声明了itemName名字和priority优先级; 还实现了CompareTo的具体逻辑,是跟另一个Item实体,进行priority优先级的比较即可; 还有一个PrintInfo函数,是用来打印,对应该Item的名字和优先级相关信息; ![[Pasted image 20240403173749.png]] 弄一个静态函数LoopTest,测试堆优先级队列逻辑; 遍历,通过随机数生成优先级,创建出来的itemLst,使用Enqueue进队列接口,塞进PEQue里; 通过RemoveAt接口,测试随机移除数据; ![[Pasted image 20240403174016.png]] 再通过Dequeue接口,测试出队列逻辑,是否正常; 会把出队列的数据,都塞到outLst这个,队列; 如果新队列,其中的优先级异常,就会抛出异常,并且终止程序; ![[Pasted image 20240403174230.png]] Main函数调用 ![[Pasted image 20240403174444.png]] 运行,逻辑正常,无异常抛出 ![[Pasted image 20240403174423.png]]