//本人菜鸟 如有错误求指出
实现优先队列 首先需要解决存储问题 链式存储结构?顺序存储结构? 由于优先队列默认使用最小堆实现 即 根结点值小于其叶子节点值 。也是一种完全二叉树 在顺序存储时 其根结点 与其对应的孩子节点有特定的 下标关系 采用数组存储数据 当父结点下标(从0开始)为 i时 其左孩子下标为2*i+1 右孩子为2*i+2。这样解决了优先队列数据存储问题。
接下来 集合中方法实现 主要涉及 增删改查 使用数组存储时还要考虑到数组自动扩容
jdk中 一共有6个量 size记录 当前元素个数 modcount记录存储更改次数 防止 多线程同步问题 Object[] queue 存储元素
DEFAULT_INITIAL_CAPACITY 存储 默认的初始化空间 Comparator<? super E> comparator 存储 自定义的比较器
MAX_ARRAY_SIZE存储用于数组扩容时 数组容量已经比较大时的 辅助处理值?
主要核心有以下方法:
加入队列 如队列中元素为0 直接加入堆顶 否则 调用上浮函数 从队列尾部 将当前元素加入堆中合适位置、
出队列 如队列中元素为1个 则直接出队列 否则 调用下浮函数 从队列头部 将队列尾部元素加入到队列中合适位置
加入队列时需要考虑扩容问题 如容量不足 需要扩容
扩容实现 当当前容量极小时 每次扩容为原来的两倍+2 否则 扩容为原容量的1.5倍 如新容量已经大于 MAX_ARRAY_SIZE 则调用hugeCapacity方法 根据minCapacity与 MAX_ARRAY_SIZE的关系 将新容量设置为 MAX_ARRAY_SIZE 或Integer.MAX_VALUE 调用 Arrays.copyof()方法 实现数组扩容及保存原数组元素
增删已经完毕 还有 改查
indexOf 为null 或不存在指定元素 返回 -1 否则返回数组中的下标
contains方法调用 indexof方法实现
remove 删除优先队列中位置靠前的指定元素 先indexOf 合法 调用 remove(int i) 在第二个remove中 取出队列尾部元素 将对位元素在该位置 先 下浮 如未沉下去 再将其上浮
peek 返回队列头部元素 直接返回 queue【0】