优先级队列和比较器-Java
试图用字符串长度作为排序因子创建优先级队列,但比较器似乎不起作用。如果我在SortedSet上使用相同的运算符,则效果良好 下面的代码打印: [z,CD,ZHE21,CDE2312,ABC1] 而我期待的是: [z,CD,ABC1,ZHE21,CDE2312] 我错过了什么优先级队列和比较器-Java,java,string,comparator,Java,String,Comparator,试图用字符串长度作为排序因子创建优先级队列,但比较器似乎不起作用。如果我在SortedSet上使用相同的运算符,则效果良好 下面的代码打印: [z,CD,ZHE21,CDE2312,ABC1] 而我期待的是: [z,CD,ABC1,ZHE21,CDE2312] 我错过了什么 PriorityQueue<String> queue = new PriorityQueue<String>(100, new Comparator<String>() {
PriorityQueue<String> queue = new PriorityQueue<String>(100, new Comparator<String>() {
public int compare(String a, String b) {
return Integer.compare(a.length(), b.length());
}
});
queue.add("CDE2312");
queue.add("ABC1");
queue.add("ZHE21");
queue.add("CD");
queue.add("z");
System.out.println(queue);
PriorityQueue队列=新的PriorityQueue(100,新的比较器(){
公共整数比较(字符串a、字符串b){
返回整数。比较(a.length(),b.length());
}
});
添加(“CDE2312”);
添加(“ABC1”);
添加(“ZHE21”);
添加(“CD”);
添加(“z”);
System.out.println(队列);
来自Javadoc:method Iterator()中提供的迭代器和method Spliterator()中提供的拆分器不保证以任何特定顺序遍历优先级队列的元素。如果您重复poll()
队列,那么您将以正确的顺序获得元素。更重要的是,如果您只是搜索“Java PriorityQueue not working”,您将看到同样的问题被反复询问,并且答案几乎总是相同的。在询问之前,最好先进行此类搜索。从Javadoc中可以看出:方法迭代器()中提供的迭代器和方法拆分器()中提供的拆分器不能保证以任何特定顺序遍历优先级队列的元素。如果您反复轮询()
队列,更重要的是,如果你只搜索“Java PriorityQueue not working”,你会看到同样的问题被反复问,答案几乎总是一样的。最好在询问之前先进行此类搜索。