PriorityQueue 的底层原理
时间: 2023-10-19 11:29:09 浏览: 139
解析Java中PriorityQueue优先级队列结构的源码及用法
5星 · 资源好评率100%
PriorityQueue的底层原理是基于优先堆(Priority Heap)的数据结构。优先堆是一种特殊的二叉树,它满足以下两个条件:
1. 任意节点的值都大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。
2. 优先堆是完全二叉树,即除了最后一层,其他层的节点都被填满,最后一层的节点都集中在左侧。
PriorityQueue的内部使用数组来实现优先堆。数组的第一个元素是队列中的根节点,每个节点的子节点在数组中的位置可以通过一些计算公式快速得到。
当向PriorityQueue中添加元素时,元素会根据其优先级被插入到合适的位置上,并确保根节点的值最小(或最大,根据比较器的设定)。插入元素时,会根据比较器或默认的自然排序规则进行比较。
当从PriorityQueue中取出元素时,总是会先取出根节点的元素,该元素是队列中最小(或最大)的元素。取出后,会重新调整堆,确保根节点的值仍然最小(或最大)。
通过优先堆的特性,PriorityQueue可以高效地实现基于优先级的队列。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* [PriorityQueue的用法和底层实现原理](https://blog.csdn.net/wr_java/article/details/116454654)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
- *3* [Java集合—PriorityQueue底层原理](https://blog.csdn.net/sanmi8276/article/details/113589290)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文