当前位置: 首页 > 知识库问答 >
问题:

Java:PriorityQueue初始化

徐正雅
2023-03-14

我试图理解启动优先级队列的以下行:

PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> b[1] - a[1]);

与文件中的构造函数部分相比,https://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html

我不知道它使用哪个构造函数。有人能分享一下这个想法吗?

另外,是否有一个文档可以更好地解释/定义语法(a,b)-

谢谢!


共有3个答案

江宏深
2023-03-14

在优先级队列中,你将基本上把用户定义的对象,所以要做到这一点,优先级队列要求你如何排序这些对象(因为优先级队列就像堆数据结构——最小/最大堆),所以我们给它一个比较器,它有一个理想的比较方法以(a, b)表示─

https://github.com/openjdk-mirror/jdk7u-jdk/blob/master/src/share/classes/java/util/PriorityQueue.java

冯宏恺
2023-03-14

自Java 8以来,有一个新的构造函数,其参数为比较器

public PriorityQueue(Comparator<? super E> comparator)

因此,使用lambda进行初始化是有效的Java8代码。

越新霁
2023-03-14

您构建的PriorityQueue使用的构造函数在1.7中还不存在,它是您链接的Javadocs版本。

它使用一个构造函数,该构造函数采用为Java1.8添加的比较器,该函数与您提供的lambda表达式相匹配。

创建具有默认初始容量的PriorityQueue,其元素根据指定的比较器排序。

自:

1.8

Lambda表达式引入Java1.8。在这里,基本上您有两个参数和表达式,它们与一个函数接口相匹配--比较器

 类似资料:
  • Initialization 初始化 Although it doesn’t look superficially very different from initialization in C or C++, initialization in Go is more powerful. Complex structures can be built during initialization a

  • 初始化是为类、结构体或者枚举准备实例的过程。这个过需要给实例里的每一个存储属性设置一个初始值并且在新实例可以使用之前执行任何其他所必须的配置或初始化。 你通过定义初始化器来实现这个初始化过程,它更像是一个用来创建特定类型新实例的特殊的方法。不同于 Objective-C 的初始化器,Swift 初始化器不返回值。这些初始化器主要的角色就是确保在第一次使用之前某类型的新实例能够正确初始化。 类类型的

  • new iSlider(DOM, DATA, OPTIONS) Name Type Description DOM dom 容器dom节点 DATA Array 数据列表 OPTIONS Object 配置项 DOM new iSlider(DOM, DATA, OPTIONS); {HTMLElement} 容器dom节点 作为第一个参数并不是必须的,会被OPTIONS.dom覆盖,但是这十分必

  • 确认初始化操作 1)初始化操作用来清空此统计ID的统计数据 2)与启用新的统计ID不同的是,初始化操作使您不需更换网站上的统计代码就可以重新开始统计 注意:初始化操作将清除此统计ID的所有统计数据,此操作不可恢复!!!

  • 创建版本库 git 基于文件夹(工作树)进行版本控制,在一个文件夹中创建 git版本库: $ cd project/ $ git init Initialized empty Git repository in .git/ 输出信息:在当前文件夹的 .git/ 目录下创建版本库 将文件提交到 git索引: git add file1 file2 file3 …… 更方便的作法是

  • 1. 引入sdk 下载wechat-mudu.min.js到小程序项目,建议放utils目录下 const Mudu = require('./utils/wechat-mudu.min') 2. 设置小程序code获取session_key地址 本方法已废弃 sdk会在初始化的时候获取用户的微信资料并设置到目睹平台,所以需要设置该地址用户获取用户openid, 详见用户 Mudu.setOp