当前位置: 首页 > wzjs >正文

网站自定义代码游戏网站后台建设

网站自定义代码,游戏网站后台建设,seo外包杭州,站长工具网址是多少Java中优先级队列的实现 Java中的优先级队列是通过PriorityQueue类实现的,它是基于**优先级堆(通常是最小堆)**的数据结构。下面详细解析其实现机制: 核心实现原理 底层数据结构: 使用数组(Object[] queu…

Java中优先级队列的实现

Java中的优先级队列是通过PriorityQueue类实现的,它是基于**优先级堆(通常是最小堆)**的数据结构。下面详细解析其实现机制:

核心实现原理

  1. 底层数据结构

    • 使用数组Object[] queue)存储元素
    • 逻辑上组织为二叉堆(默认是最小堆)
  2. 堆的性质维护

    • 父节点总是小于或等于子节点(最小堆)
    • 插入和删除操作后通过"上浮"和"下沉"操作维护堆性质

关键操作实现

1. 插入元素(add/offer)

public boolean offer(E e) {if (e == null)throw new NullPointerException();modCount++;int i = size;if (i >= queue.length)grow(i + 1);  // 动态扩容siftUp(i, e);     // 上浮操作size = i + 1;return true;
}

上浮过程(siftUp):

private void siftUp(int k, E x) {if (comparator != null)siftUpUsingComparator(k, x);elsesiftUpComparable(k, x);
}private void siftUpComparable(int k, E x) {Comparable<? super E> key = (Comparable<? super E>) x;while (k > 0) {int parent = (k - 1) >>> 1;  // 计算父节点位置Object e = queue[parent];if (key.compareTo((E) e) >= 0)break;queue[k] = e;  // 父节点下移k = parent;}queue[k] = key;  // 找到最终位置
}

2. 删除元素(poll/remove)

public E poll() {if (size == 0)return null;int s = --size;modCount++;E result = (E) queue[0];E x = (E) queue[s];queue[s] = null;if (s != 0)siftDown(0, x);  // 下沉操作return result;
}

下沉过程(siftDown):

private void siftDown(int k, E x) {if (comparator != null)siftDownUsingComparator(k, x);elsesiftDownComparable(k, x);
}private void siftDownComparable(int k, E x) {Comparable<? super E> key = (Comparable<? super E>)x;int half = size >>> 1;        // 只需检查非叶子节点while (k < half) {int child = (k << 1) + 1; // 左子节点Object c = queue[child];int right = child + 1;if (right < size &&((Comparable<? super E>) c).compareTo((E) queue[right]) > 0)c = queue[child = right]; // 选择较小的子节点if (key.compareTo((E) c) <= 0)break;queue[k] = c;  // 子节点上移k = child;}queue[k] = key;  // 找到最终位置
}

重要特性

  1. 动态扩容

    • 初始容量为11
    • 扩容策略:小队列(<64)时双倍扩容,大队列时增长50%
  2. 排序方式

    • 默认自然顺序(最小堆)
    • 可通过Comparator自定义优先级顺序
  3. 非线程安全

    • 线程安全版本使用PriorityBlockingQueue
  4. 时间复杂度

    • 插入/删除:O(log n)
    • 查看队首:O(1)

使用示例

// 默认最小堆
PriorityQueue<Integer> minHeap = new PriorityQueue<>();
minHeap.offer(5);
minHeap.offer(1);
minHeap.offer(3);
System.out.println(minHeap.poll()); // 输出1// 自定义比较器实现最大堆
PriorityQueue<Integer> maxHeap = new PriorityQueue<>((a, b) -> b - a);
maxHeap.offer(5);
maxHeap.offer(1);
maxHeap.offer(3);
System.out.println(maxHeap.poll()); // 输出5

Java的优先级队列实现高效且灵活,能够满足大多数需要优先级调度的应用场景。

http://www.dtcms.com/wzjs/586713.html

相关文章:

  • 湖南的商城网站建设营销型网站建设公司平台
  • j建设网站网站源码下载音乐
  • 电子商务网站开发书例子济南网站建设分销商城
  • 智能建站价格h5免费制作平台八图
  • 外贸网站建设服务器学校网站的建立
  • 企业酒店的网站建设网址有哪些组成
  • 汝阳网站建设哪家好网上免费家装设计
  • 在线网页设计网站小程序商城怎么开通
  • 来个网站吧好人一生平安2022徐州网站建设解决方案
  • 版式设计模板网站比较有名的公司网站
  • php网站源码删除企业整站优化
  • 带数据的网站易安卓做网站
  • 阿里云快速建站教程卖护肤在哪个网站做宣传好
  • 装修效果图网站网页首页设计图片
  • 鹤壁市城乡一体化示范区网站用老域名做网站还是新域名
  • 魔云手机建站网站开发外包维护合同范本
  • 爱情表白制作网页的网站检测网站是否安全
  • 万网icp网站备案专题手机网站如何开通微信公众号
  • 电商网站的建设背景图片东莞注册有限公司流程及费用
  • 手机网站建设如何wordpress后台进不去
  • 深圳网站开发多少钱哪个网站可以改字体
  • 模仿网站怎么做wordpress主题几个网站
  • “网站制作”怎么计算网站开发费用
  • 简单的网站怎么做网站建设服务方案ppt
  • 试分析网站推广和优化的原因电子商务网站建设报价表
  • 做网站全屏图片拉长代码wordpress修改地址后
  • 服务好的南昌网站设计如何做兼职网站平台
  • 论坛网站 备案wordpress 资讯类 模版
  • 网站建设公司兴田德润i简介现在免费的外贸平台有哪些
  • 外贸网站建设 翻译军事新闻内容摘抄