我在班级中使用的compareTo函数
public int compareTo(Book b) {
if(id>b.id){
return 1;
}else if(id<b.id){
return -1;
}else{
return 0;
}
}
当我添加一个priorityQueue,其中id为12 99 89 55 40 4时,我得到的输出是:
4
40
12
99
55
89
我用来迭代PriorityQueue的代码是:
Iterator it = queue.iterator();
while(it.hasNext()){
Book b = (Book)it.next();
System.out.println(b.id);
}
这种输出可能会出现什么问题? 一旦我调用queue.remove()然后迭代,顺序就好了。
答案 0 :(得分:2)
PriorityQueue
的迭代器不能保证按元素类Comparable
实现定义的顺序返回元素。{/ p>
来自Book
的Javadoc:
此类及其迭代器实现Collection和Iterator接口的所有可选方法。 方法iterator()中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。如果需要有序遍历,请考虑使用Arrays.sort(pq.toArray())。