Java中的优先级队列
发布时间:2020-12-15 01:59:50 所属栏目:Java 来源:网络整理
导读:你有2个参数吗?例如,我想将一个字符串和一个相应的整数添加到优先级键.然后我将按整数排序.我知道如何添加字符串或整数,但我不知道如何添加它们.有人可以指出我正确的方向,让我知道我是否正确的方式? 解决方法 有两种方法可以做到这一点.无论哪种方式,您都
你有2个参数吗?例如,我想将一个字符串和一个相应的整数添加到优先级键.然后我将按整数排序.我知道如何添加字符串或整数,但我不知道如何添加它们.有人可以指出我正确的方向,让我知道我是否正确的方式?
解决方法
有两种方法可以做到这一点.无论哪种方式,您都希望创建一个自定义对象,该对象同时包含String(您想要的值)和整数(优先级).
第一个解决方案是让这个数据对象实现Comparable: class Data implements Comparable<Data> { private final String message; private final int priority; public Data(String message,int priority) { this.message = message; this.priority = priority; } @Override int compareTo(Data other) { return Integer.valueOf(priority).compareTo(other.priority); } // also implement equals() and hashCode() } 然后当你这样做 PriorityQueue<Data> queue = new PriorityQueue<Data>(); 队列将按compareTo方法定义的顺序对项目进行排序. 此解决方案的问题在于,如果您希望排序仅在整数上,则equals方法和compareTo方法将不一致,或者您的equals方法将不正确. 一个更好的解决方案是使用PriorityQueue构造函数来获取Comparator.在这种情况下,Data不必实现Comparable;你只需要一个定义你的订购的比较器: public final class OrderDataByPriority implements Comparator<Data> { public static final OrderDataByPriority INSTANCE = new OrderDataByPriority(); private OrderDataByPriority() {} @Override public int compare(Data data1,Data data2) { return Integer.valueOf(data1.priority).compareTo(data2.priority); } @Override public boolean equals(Object other) { return other == OrderDataByInteger.INSTANCE; } private Object readResolve() { return INSTANCE; } } 请注意,由于此比较器不采用数据,因此我将其设为单例. 然后,您可以创建以下队列行: PriorityQueue<Data> queue = new PriorityQueue<Data>( initialCapacity,OrderDataByPrority.INSTANCE); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- Springboot入门程序
- java – 有没有办法使用Apache POI读取.xls和.xlsx文件?
- javax.net.ssl.SSLHandshakeException:sun.security.valid
- java.lang.NoClassDefFoundError:解析失败:Landroid / su
- 尝试通过Java 8中的JDBC-ODBC连接到.accdb文件时出现ClassN
- java二叉树遍历——深度优先(DFS)与广度优先(BFS) 递归版与
- 泡泡一分钟:FMD Stereo SLAM: Fusing MVG and Direct Form
- java – 使用通用通配符代替接口
- Java / Python / Mathematica中的重复序列
- 开学第三周暨函数重载