如何使用优先队列?

2023-12-05

我如何获得PriorityQueue对我想要它排序的内容进行排序?

另外,两者之间有区别吗offer and add方法?


使用构造函数重载,它需要一个Comparator<? super E> comparator并传入一个比较器,该比较器以适合您的排序顺序的方式进行比较。如果您给出了如何排序的示例,如果您不确定,我们可以提供一些示例代码来实现比较器。 (不过这非常简单。)

正如其他地方所说:offer and add只是不同的接口方法实现。在我得到的 JDK 源代码中,add calls offer。虽然add and offer have 潜在地由于能力的不同,通常会有不同的行为offer表示由于大小限制而无法添加该值,这种差异在以下情况中无关紧要PriorityQueue这是无界的。

下面是按字符串长度排序的优先级队列的示例:

// Test.java
import java.util.Comparator;
import java.util.PriorityQueue;

public class Test {
    public static void main(String[] args) {
        Comparator<String> comparator = new StringLengthComparator();
        PriorityQueue<String> queue = new PriorityQueue<String>(10, comparator);
        queue.add("short");
        queue.add("very long indeed");
        queue.add("medium");
        while (queue.size() != 0) {
            System.out.println(queue.remove());
        }
    }
}

// StringLengthComparator.java
import java.util.Comparator;

public class StringLengthComparator implements Comparator<String> {
    @Override
    public int compare(String x, String y) {
        // Assume neither string is null. Real code should
        // probably be more robust
        // You could also just return x.length() - y.length(),
        // which would be more efficient.
        if (x.length() < y.length()) {
            return -1;
        }
        if (x.length() > y.length()) {
            return 1;
        }
        return 0;
    }
}

这是输出:

short

medium

确实很长

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用优先队列? 的相关文章

  • 如何使用 Java Swing 创建图像映射?

    我需要使用 Swing 制作一个显示背景图像的图像地图 然后当鼠标悬停在 或单击 特定热点上时 我需要弹出一个 放大 图像并显示它 我正在考虑扩展 JPanel 以包含图像引用并通过 PaintComponent g 方法绘制该图像 到目前
  • Gradle 发布两次尝试将 RPM 上传到 Artifactory YUM 存储库,第二次失败并显示 403

    我正在尝试使用 gradle 和 ivy publish 插件将 RPM 工件发布到 Artifactory 上的本地 YUM 存储库 我遇到的问题是 发布任务似乎尝试上传工件两次 第二次尝试失败 正确 HTTP 状态代码为 403 我进行
  • wsimport Xauthfile 错误

    我正在尝试为我们公司网络外部的受 SSL 保护的 Web 服务 在 Microsoft Biztalk 上 生成客户端 也称为消费者 所需的 java 帮助类 我们只能通过代理访问它 并且无法更改 Web 服务本身的任何内容 这是我提供给
  • 从java管理unix进程的最佳方法是什么?

    我正在寻找一些简单的任务 例如列出用户的所有正在运行的进程 或者通过pid等杀死特定进程 来自Java的基本unix进程管理 有没有相对成熟且有文档的库 我可以从 JVM 运行外部命令 然后解析标准输出 错误 但这似乎需要大量工作 而且一点
  • 从枚举返回计算值

    我的问题有两个而且很简单 按原样误解枚举 这个想法在我的代码中缺少一些重要的抽象 代码示例 其中oprt calc x y 无法编译 有警告cannot find symbol public enum Operation PLUS publ
  • java中应用程序的CPU核心数和线程数之间有什么关系?

    我是java新手多线程编程 我想到的问题是 根据我的数量 我可以运行多少个线程CPU核心数 如果我运行的线程超过CPU核心数机器运行应用程序会产生开销吗 例如 当我们有一台服务器计算机 其中有一个运行 2 个线程 主线程 开发人员线程 的服
  • Scala - InvalidClassException:没有有效的构造函数

    我创建了一个Serializable番石榴的版本ImmutableRangeMap and Builder在 Scala 中以便在我的 Spark 应用程序中使用 我的构造函数中有一个零参数SerializableImmutableRang
  • 升级到 Gradle 2.0 后:在根项目上找不到属性“Compile”

    为了避免在构建 Java 源代码时出现有关特殊字符的警告 我将此行放在我的gradle build在升级到 Gradle 2 0 之前运行良好 tasks withType Compile options encoding UTF 8 升级
  • Android 上为什么会出现线程泄漏?

    我在 Android 应用程序中注意到 每次退出主屏幕时 堆大小 泄漏 都会增加 ByteArrayOutputStream 的量 我能做到的最好的办法就是添加 this mByteArrayOutputStream null 在 的最后r
  • 将 person.city.name 添加到 TableView

    我有一个 TableView 和一些 POJO 并且想要将其中一个属性绑定到 TableView 然而 该属性也是一个 POJO 并且应该有一个属性显示在 TableView 中 这是我的代码
  • SLF4J 日志级别作为参数[重复]

    这个问题在这里已经有答案了 我们希望使用 SLF4J 但我们发现的一件事是您无法将级别指定为参数 即 Logger log Level INFO messsage 你必须这样做 logger info message 这使得无法通过方法传递
  • Java 8 元空间垃圾收集

    我正在运行的 java 进程在运行的第一个小时左右始终表现良好 然而 性能会迅速下降 在分析时 我发现元空间垃圾收集相当频繁地发生 直到小时标记 然后失去控制 我相当确定我能够使用 XX MaxMetaspaceSize 选项来解决此问题
  • Web 服务器上的身份验证和授权 ?

    我正在构建一个 Android 应用程序 它与 apache tomcat 上的 Web 服务器进行通信 Web 服务器采用 JAVA EE 构建 目前 为了进行身份验证和授权 我使用用户名 密码 为了管理会话 我使用令牌 因此 当用户登录
  • 如何安装“Android 支持库”以将 Gluon Mobile 应用程序部署到 Android?

    我想使用 Gluon Mobile 框架开发一个 Android 应用程序 我在 Netbeans IDE 中安装了 Gluon 插件 创建了一个示例项目并成功构建了它 现在我想将该应用程序部署到 Android 设备 我指的是在线文档 1
  • Python Blowfish 加密

    由于我对 Java 的了解不完整 我正在努力将此加密代码转换为 Python 代码 两者应该得到完全相同的结果 帮助将不胜感激 Java函数 import javax crypto Cipher import javax crypto sp
  • Guava Splitter/Joiners 每次使用时都应该创建吗?

    Guava 包含用于拆分和连接字符串的实用程序 但它需要实例化 Splitter Joiner 对象才能执行此操作 这些是小对象 通常仅包含要分割 合并的字符 维护对这些对象的引用以便重用它们是一个好主意 还是在需要它们时创建它们并让它们被
  • Java 错误:默认构造函数未定义隐式超级构造函数

    我有一些简单的 Java 代码 其结构与此类似 abstract public class BaseClass String someString public BaseClass String someString this someSt
  • 如何用java实现FTP?

    我正在使用 FTP 我必须在客户端将消息嵌入到图像文件中 并且我必须将其发送到服务器 在服务器端我必须检索图像文件并然后我将检索该消息 我已经完成了嵌入消息并使用密码学和隐写术技术检索消息 我正在寻找如何将该文件从客户端传输到服务器 我必须
  • 如何处理 Sonarlint java:S2259 (空指针不应取消引用)

    if res getBody null res getBody getServiceResult null return 在上面的代码中 sonarlint 抱怨说 SonarLint 可能会抛出 NullPointerException
  • 如何更改 Java 中不同类的变量?

    如何更改 Java 中不同类的变量 我正在尝试更改另一个类中的变量 然后在第一个类中使用它 我在 First 类中创建了一个变量 并将其值设置为 1 然后我尝试在 Second 类中将同一变量的值更改为 2 但是当我在 First 类中使用

随机推荐

  • mozilla 和 safari 的仪表栏样式

    I am using the following css on my meter bars but somehow the styling does not work on safari see below screenshots I am
  • 如何停止 while 循环

    这个 while 循环永远不会结束 例如 当我输入错误的密码时 它会一遍又一遍地进入 密码错误 部分 Logo inFile open UsernamePassword txt if inFile cout lt lt Unable to
  • 在http标头中设置身份验证令牌

    我一直在关注关于如何设置身份验证令牌的railscasthttp railscasts com episodes 352 securing an api view asciicast 我已经很好地设置了我的应用程序 它使用authentic
  • 获取字符串的每个组合

    我有一个组合学作业 涉及从特定的字符串组合中获取长度小于或等于 6 的每个单词 在本例中 它是 S a ab ba 教授刚刚开始列出它们 但我认为用程序来解决会更容易 唯一的问题是我无法得到一个好的算法来实际计算每个可能的选项 如果有人可以
  • Onchange 事件运行不佳

    我创建了以下 html 页面
  • 必须使用 fibo_ 实例作为第一个参数调用未绑定方法 f() (改为使用 classobj 实例)

    在 Python 中 我尝试在类中运行一个方法 但出现错误 Traceback most recent call last File C Users domenico Desktop py main py line 8 in
  • 将 sqlite3 db 关联到 iPhone 应用程序

    我正在尝试将 SQLite3 数据库文件与我们的应用程序关联起来 以便可以轻松地从电子邮件打开备份的数据库 然而 以下内容似乎不起作用 因为 邮件 仍然无法识别该文件 在 iPad 和 iPhone 4 上
  • Springfox swagger - 没有 Spring Boot jersey 和 gradle 的 api 文档

    我有一个带有 jersey 和 gradle 的 spring boot 应用程序 我正在尝试使用 springfox 自动生成 API 文档 我已按照此处的步骤操作 http springfox github io springfox d
  • 你能用 pty 做什么?

    阅读了各种资源 包括http www linusakesson net programming tty 我对伪终端的结构和使用仍然很困惑和好奇 在 Linux 终端 bash 不是 tty 中 我们有三个流 stdin stdout std
  • C++ 中初始化变量的 = 和 {} 语法之间的差异

    我读过相当多的 C 代码 并且遇到过两种初始化变量的方法 方法一 int score 0 方法二 int score 我知道int score 会将分数初始化为 0 因此int score 0 这两者有什么区别 我读过了初始化 括号与等号但
  • 字符串生成器与列表

    我正在读取包含数百万行的多个文件 并且正在创建具有特定问题的所有行号的列表 例如 如果特定字段留空或包含无效值 所以我的问题是 跟踪可能超过一百万行的数字列表的最有效的日期类型是什么 使用字符串生成器 列表或其他东西会更有效吗 我的最终目标
  • 如何保护共享工作簿中的工作表?

    我有一个将在多个用户之间共享的工作簿 将运行宏以在 Excel 工作表中输入来自用户表单的数据 该工作表需要受到保护 以便用户无法对其进行编辑 我有 ws Unprotect 我的宏代码 ws Protect UserInterfaceOn
  • 有没有办法降低禁用按钮上图像的饱和度?

    有没有办法可以降低禁用按钮中图像的饱和度 例如 ICommand CanExecute false 或者我需要使用单独的图像 样式 触发器 我为此使用了一种特殊的样式 当按钮被禁用时 它会降低图像的不透明度 是的 如果按钮绑定到命令 这也有
  • initFields(scales = scales) 中的错误:找不到函数“initRefFields”

    我的代码中有一个 ggplot2 绘图函数 当文件作为 R 代码来源时 该函数工作正常 但是当我将此函数包含在 R 包中时 当然 我在包的描述和命名空间文件中包含 ggplot2 和比例 我得到以下内容错误 Error in initFie
  • 实体框架代码优先延迟加载

    我有两个对象类 public class User public Guid Id get set public string Name get set Navigation public ICollection
  • 对 big.matrix 进行子集化的正确方法

    我想知道是否有一种 正确 的方法来对 R 中的 big matrix 对象进行子集化 对矩阵进行子集化很简单 但该类总是恢复为 矩阵 当处理像这样的小数据集时 这不是问题 但对于大量数据集 但对于极大的数据集 子集仍然可以从 big mat
  • 你能将“指向函数指针的指针”转换为 void*

    受到对我的答案的评论的启发here 这个步骤序列在 C 标准 C11 中合法吗 创建一个函数指针数组 获取指向第一个条目的指针并将其强制转换指向函数指针的指针 to void 对其执行指针算术void 将其投射回指向函数指针的指针并取消引用
  • JVM会自动关闭文件吗?

    我在某处读到 没有必要自己关闭它 只需保留它 JVM 会帮助你做到这一点 这是真的吗 假设我需要从文件中获取数据 Source fromFile fileName getLines 直接地 无需 val source Source from
  • IOError:13,通过 Python 写入 /etc/hosts 时“权限被拒绝”

    我正在开发一个 Python 应用程序 需要访问主机文件以添加几行 一切都在我的测试文件上运行 但是当我告诉程序实际修改 etc hosts 中的主机文件时 我收到 IOError 13 据我了解 我的应用程序没有 root 权限 我的问题
  • 如何使用优先队列?

    我如何获得PriorityQueue对我想要它排序的内容进行排序 另外 两者之间有区别吗offer and add方法 使用构造函数重载 它需要一个Comparator