当前位置: 首页 > 面试题库 >

java.util.PriorityQueue和特定的Comparator中的顺序错误

斜昊空
2023-03-14
问题内容

我对java.util.PriorityQueue和我自己的Comparator的这个小例子感到非常困惑:

在这段代码中,我在队列中得到了错误的顺序。结果是:5,8,7而不是5,7,8 我有什么问题Comparator<Vertex>吗?谢谢您的帮助。

public class Test {

public static void main(String[] args) {
    PriorityQueue<Vertex> priorityQueue = new PriorityQueue<Vertex>(new Comparator() {
        @Override
        public int compare(Object o1, Object o2) {
            Vertex u = (Vertex) o1;
            Vertex v = (Vertex) o2;
            return Integer.compare(new Integer(u.distance), new Integer(v.distance));
        }
    });

    Vertex vertex1 = new Vertex(1);
    Vertex vertex2 = new Vertex(2);
    Vertex vertex3 = new Vertex(3);
    Vertex vertex4 = new Vertex(4);

    vertex1.distance = 8;
    vertex2.distance = 5;
    vertex3.distance = 7;


    priorityQueue.add(vertex1);
    priorityQueue.add(vertex2);
    priorityQueue.add(vertex3);

}

private static class Vertex {
    int distance;
    int id;

    public Vertex(int id) {
        this.id = id;
    }
}
}

问题答案:

A PriorityQueue不会按顺序存储其元素。它可以按顺序将它们还给您。

如果您在上调用了poll()3次PriorityQueue,则会以适当的顺序恢复元素。



 类似资料:
  • 我有一个表格,例如如下: 我想在特定条件下对上述数据进行排序,例如:按升序对值s2的数据进行排序,其中col2=A5,这意味着数据应按正常顺序进行排序,但如果col2='A5',则值s2的顺序应为升序或降序的行应排在第一位,如下所示。 col2='A5'中的数据应根据列values2的值按升序或降序排列。这能实现吗? 具体来说,让我们只进行排序。如果我按col2下单。行将按A1、A2、A3、A4、

  • 问题内容: 我想我已经写了如下几千遍: 但是直到现在我才考虑这些命令的顺序是否重要?我知道这之间并不要紧,因为在大多数1这些将被读取的,但它是 更好的 (以适应未来发展等方面)做W3C标准第一或最后? 问题答案: 毫无疑问,最佳做法是最后保留未添加前缀的属性: 无论是上期开出和将是已使用的一个。 是“实验”属性-实现可能包含与规范的偏差。的实现应与规范中的实现匹配。 最好在可用时使用 W3C实施

  • 我有一个对象列表,需要根据特定的顺序排序。如下代码所示: 这也是当它得到排序,只有名称(“宝马”,“奥迪”,“奔驰”)的位置正在改变。我在汽车课上还有一个字段,那就是数量。数量将处于相同位置。这个职位也应该随着名字而改变。 我希望输出为,但实际输出为

  • 如何按特定单词获取所有数据和订单。例如,我有列名状态。状态为“已批准”、“待定”、“已拒绝”的存储。 如何对数据进行排序,如按降序显示所有状态“待定”?

  • 问题内容: 假设我有一个查询“ select * from子句,其中id在(0,2,5,1,3)中”,我实际上希望返回的行以它们在where子句中指定的相同顺序返回。ID的顺序将随查询的不同而改变,并且该顺序没有模式。 我知道可以更改数据模型,创建临时表等。但是请相信我,这些类型的解决方案在我的情况下将行不通。我也无法在应用程序代码中更改结果对象的顺序。 我还知道,不同的数据库引擎对事物的排序方式

  • 我想用Apache Camel和Quartz2按spceific顺序设计路线。我定义了一个上下文,添加了两条路由: 代码构建和运行,但我没有来自控制台的反馈,我期待订单1的路由结果。此外,顺序为2的路由不会写入作为参数传递的文件。每条路线,采取单独正确运行。有人能帮帮我吗?