首页 / JAVA / Java中的优先级队列
Java中的优先级队列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java中的优先级队列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1651字,纯文字阅读大概需要3分钟。
内容图文
![Java中的优先级队列](/upload/InfoBanner/zyjiaocheng/766/85c28866e0d94b9bac1663df09bd3995.jpg)
你有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);
内容总结
以上是互联网集市为您收集整理的Java中的优先级队列全部内容,希望文章能够帮你解决Java中的优先级队列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。