当前位置: 首页 > 编程笔记 >

Java Max Heap(堆)

上官扬
2023-03-14
本文向大家介绍Java Max Heap(堆),包括了Java Max Heap(堆)的使用技巧和注意事项,需要的朋友参考一下

最大堆是一个完整的二叉树,其中,每个步骤中根节点的值都大于或等于子节点中的值。

以下是使用库函数实现的Max Heap。

示例

import java.util.*;
public class Demo{
   public static void main(String args[]){
      PriorityQueue<Integer> my_p_queue = new PriorityQueue<Integer>(Collections.reverseOrder());
      my_p_queue.add(43);
      my_p_queue.add(56);
      my_p_queue.add(99);
      System.out.println("优先级队列中的元素是 : ");
      Iterator my_iter = my_p_queue.iterator();
      while (my_iter.hasNext())
      System.out.println(my_iter.next());
      my_p_queue.poll();
      System.out.println("使用poll函数删除元素后,队列元素为 :");
      Iterator<Integer> my_iter_2 = my_p_queue.iterator();
      while (my_iter_2.hasNext())
      System.out.println(my_iter_2.next());
      Object[] my_arr = my_p_queue.toArray();
      System.out.println("最大堆的数组表示形式: ");
      for (int i = 0; i < my_arr.length; i++)
      System.out.println("Value: " + my_arr[i].toString());
   }
}

输出结果

优先级队列中的元素是 :
99
43
56
使用poll函数删除元素后,队列元素为:
56
43
最大堆的数组表示形式:
Value: 56
Value: 43

名为Demo的类,在主函数中,定义了优先级队列的实例,并使用“add”函数将元素添加到其中。定义了一个迭代器

用于迭代优先级队列中的元素。“poll”函数用于从列表中删除元素。接下来,对元素进行迭代并显示在屏幕上。

 类似资料:
  • 问题内容: jvm进程的内存使用量一直在增加,并且从未减少。我通过在linux服务器上执行top进行检查。该应用程序正在将作业调度到群集(使用Quartz + SunJava DRMAA API) Java堆空间在应用程序生命周期内保持在限制之内,但是jvm进程显示内存使用率稳定增长且从未下降。 这是内存泄漏吗?如果是这样,为什么堆空间在限制之内。有人可以解释一下。 更新: 当我通过jconsol

  • 问题内容: 编译Android项目时如何解决? 升级到Android Studio版本1后,我得到了这个。但是,我不认为这是问题所在。当我开始将应用程序升级到SDK 21之前(这是在SDK 20之前)的可能性最大。但是我也不是很确定。 我在Google周围搜索了一些 修复程序,但找不到可行的解决方案。大多数修复是针对Eclipse IDE的。 这是编译时遇到的完整logcat错误: 是因为我使用了

  • 问题内容: 调试时,Eclipse中的Debug视图显示了调用堆栈。太好了 但我希望能够过滤掉我绝对不关心的所有调用,例如Spring和JUnit运行器。 这是我现在的调用堆栈的示例。我想将所有条目保留为粗体,同时将所有其余部分隐藏。有可能做任何事情吗?(插件,下一个Eclipse版本,配置,…) 问题答案: 我知道过滤堆栈跟踪视图的唯一方法是通过Mylyn。如果您有一个活动的Mylyn任务,并且

  • 问题内容: 是否有任何工具可以提取出现在日志文件中的堆栈跟踪列表,并可能计算出唯一的堆栈跟踪? 编辑 :我会提出一些不基于GUI的内容,并在后台运行并提供某种报告。我有很多从几种环境中收集的日志,只是想快速了解一下。 问题答案: 我想出了以下Groovy脚本。当然,它已经非常适应我的需求,但是我希望它能对某人有所帮助。

  • 问题内容: 我刚在生产环境中遇到了不愉快的经历, 我将问题追溯到我在函数中的使用。 为了验证它实际上是否比通过声明的构造函数()进行的正常创建更糟糕,我编写了以下小型方法: 在索引达到30k后立即运行方法将导致方法失败。使用该程序不会失败,但是会不断努力直到被杀死(索引很容易达到150万)。 为什么在堆上创建那么多元素以至于导致如此之快? (顺便说一句,当集合类型为时也会发生。) 问题答案: 在第

  • 问题内容: 有没有一种方法可以通过编程而不是作为vm参数来设置最大Java堆大小? 就像是: 问题答案: 不适用于任何Hotspot JVM。只能在命令行上指定JVM堆参数,然后在JVM的生存期内对其进行固定。 使用Hotspot Java实现,“更改”应用程序堆大小的唯一方法是使用不同的命令行参数在新的JVM中重新启动它。 (我隐约记得,其他一些供应商的JVM 确实 允许在运行的JVM中更改某些

  • 问题内容: 任何人都可以用C,C ++和Java清楚地解释一下。什么都在堆栈上,什么都在堆上以及何时分配。 我所知道的, 每个函数调用的所有局部变量(无论是基元,指针还是引用变量)都在新的堆栈框架上。 使用new或malloc创建的所有内容都会进入堆。 我对几件事感到困惑。 是在堆上创建的对象成员的引用/基元是否也存储在堆上? 以及在每个框架中递归创建的方法的那些本地成员呢?它们都在堆栈上吗?如果

  • 问题内容: Java内存空间(Perm空间,Space Stack,堆空间)之间有什么区别? JVM什么时候使用一个或另一个? 如果我使用Scala / Groovy / etc等,会有区别吗? 问题答案: 只是 堆空间:所有活动对象都分配在这里。 堆栈空间:在方法调用或变量实例化中存储对对象的引用以获取变量。 烫发空间:存储已加载的类信息 例如: 执行完上述行之后,内存状态将是这样。 堆:存储“