compareTo在Java优先级队列中工作不稳定

时间:2017-05-24 06:36:40

标签: java

我在班级中使用的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()然后迭代,顺序就好了。

1 个答案:

答案 0 :(得分:2)

PriorityQueue的迭代器不能保证按元素类Comparable实现定义的顺序返回元素。{/ p>

来自Book的Javadoc:

  

此类及其迭代器实现Collection和Iterator接口的所有可选方法。 方法iterator()中提供的迭代器不保证以任何特定顺序遍历优先级队列的元素。如果需要有序遍历,请考虑使用Arrays.sort(pq.toArray())。