我如何获得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(使用前将#替换为@)