如何获得PriorityQueue按我希望的排序方式排序
使用构造函数重载,它使用比较器<;?超级E>;比较器并传入一个比较器,该比较器根据您的排序顺序以适当的方式进行比较。如果您给出一个如何排序的示例,如果您不确定,我们可以提供一些示例代码来实现比较器。(不过这很简单。)
正如其他地方所说:提供和添加只是不同的接口方法实现。在我得到的JDK源代码中,addcallsoffer。虽然add和offer由于offer能够指示由于大小限制而无法添加值,因此通常有潜在的不同行为,但这种差异在无限制的PriorityQueue中是不相关的
以下是按字符串长度排序的优先级队列示例:
//Test.java
导入java.util.Comparator;
导入java.util.PriorityQueue;
公开课考试{
公共静态void main(字符串[]args){
比较器<;字符串>;比较器=新的StringLength比较器();
优先级队列<;字符串>;队列=新优先级队列<;字符串>;(10,比较器);
队列。添加(“short”);
队列。添加(“确实很长”);
队列。添加(“中等”);
while(queue.size()!=0){
System.out.println(queue.remove());
}
}
}
//StringLengthComparator.java
导入java.util.Comparator;
公共类StringLengthComparator实现Comparator<;字符串>;{
@凌驾
公共整数比较(字符串x、字符串y){
//假设两个字符串都不为空。实际代码应为空
//可能会更健壮
//也可以只返回x.length()-y.length(),
//这样会更有效率。
如果(x.length()<;y.length()){
返回-1;
}
如果(x.length()>;y.length()){
返回1;
}
返回0;
}
}
以下是输出:
短
中等
确实很长