Java 优先级队列默认顺序 比较器cmp=新比较器(){ 公共整数比较(结构e1、结构e2){ 返回e1.x-e2.x; } };

Java 优先级队列默认顺序 比较器cmp=新比较器(){ 公共整数比较(结构e1、结构e2){ 返回e1.x-e2.x; } };,java,priority-queue,Java,Priority Queue,结构是点结构。 当我提供: (3,1)(3,2)(3,3)(3,4) q给了我: (3,1)(3,4)、(3,3)(3,2) 当我提出: (3,1)(3,3)(3,2)(3,4) 它给了我: (3,1)(3,4)、(3,2)(3,3) 逻辑是什么 既然不比较y,它应该只给出key\u在序列中的顺序吗? 当我检查API时,它告诉我“一个基于优先级堆的无界优先级队列……该队列的头是相对于指定顺序的最小元素。如果多个元素被绑定为最小值,则头是这些元素中的一个——绑定被任意断开。” 有人能帮你解释一下吗

结构是点结构。 当我提供:

(3,1)(3,2)(3,3)(3,4)

q
给了我:

(3,1)(3,4)、(3,3)(3,2)

当我提出:

(3,1)(3,3)(3,2)(3,4)

它给了我:

(3,1)(3,4)、(3,2)(3,3)

逻辑是什么

既然不比较
y
,它应该只给出
key\u在
序列中的顺序吗? 当我检查API时,它告诉我“一个基于优先级堆的无界优先级队列……该队列的头是相对于指定顺序的最小元素。如果多个元素被绑定为最小值,则头是这些元素中的一个——绑定被任意断开。”

有人能帮你解释一下吗?

这里没有定义顺序,因为你所有的点都互相联系,因为它们的
x
坐标值是相同的。如果希望具有相同的顺序,则应通过修改
compare()
实现来强制执行,同时考虑它们的
y
坐标值

而且,即使由于某种原因,顺序是相同的,程序依靠未定义的行为来判断其正确性也是不正确的。

此处未定义顺序,因为所有点都相互关联,因为它们的
x
坐标值相同。如果希望具有相同的顺序,则应通过修改
compare()
实现来强制执行,同时考虑它们的
y
坐标值

而且,即使由于某种原因,顺序是相同的,程序依靠未定义的行为来判断其正确性也是不正确的。

此处未定义顺序,因为所有点都相互关联,因为它们的
x
坐标值相同。如果希望具有相同的顺序,则应通过修改
compare()
实现来强制执行,同时考虑它们的
y
坐标值

而且,即使由于某种原因,顺序是相同的,程序依靠未定义的行为来判断其正确性也是不正确的。

此处未定义顺序,因为所有点都相互关联,因为它们的
x
坐标值相同。如果希望具有相同的顺序,则应通过修改
compare()
实现来强制执行,同时考虑它们的
y
坐标值


而且,即使出于某种原因,顺序是相同的,你的程序依靠未定义的行为来保证其正确性也是不正确的。

答案在你引用的文档中:“任意断开连接”意味着PQ可以在看到连接时做任何它想做的事情,包括随机洗牌你的输入


您的所有输入都有相同的x坐标,因此它们都是并列的,优先级队列可以“任意”处理,这意味着它可以以任何方式处理,而不需要任何保证。

答案在您引用的文档中:“并列任意断开”意味着PQ在看到并列时可以做任何它想做的事情,包括随机洗牌输入


您的所有输入都有相同的x坐标,因此它们都是并列的,优先级队列可以“任意”处理,这意味着它可以以任何方式处理,而不需要任何保证。

答案在您引用的文档中:“并列任意断开”意味着PQ在看到并列时可以做任何它想做的事情,包括随机洗牌输入


您的所有输入都有相同的x坐标,因此它们都是并列的,优先级队列可以“任意”处理,这意味着它可以以任何方式处理,而不需要任何保证。

答案在您引用的文档中:“并列任意断开”意味着PQ在看到并列时可以做任何它想做的事情,包括随机洗牌输入


您的所有输入都具有相同的x坐标,因此它们都是并列的,优先级队列可以“任意”处理该坐标,这意味着它可以以任何方式进行处理,而无需任何保证。

请添加
struc
的代码,以及用于在队列中放置/检索值的代码。您是使用
迭代器来迭代这些值,还是每次都使用
poll()
来获取/移除头部?“领带被任意打断”意味着PQ在看到领带时可以做任何它想做的事情,包括随机洗牌您的输入。我每次都使用poll()方法来获取/移除头部。Struc类只是一个点类。请添加
Struc
的代码,以及用于在队列中放置/检索值的代码。您是使用
迭代器来迭代这些值,还是每次都使用
poll()
来获取/移除头部?“领带被任意打断”意味着PQ在看到领带时可以做任何它想做的事情,包括随机洗牌您的输入。我每次都使用poll()方法来获取/移除头部。Struc类只是一个点类。请添加
Struc
的代码,以及用于在队列中放置/检索值的代码。您是使用
迭代器来迭代这些值,还是每次都使用
poll()
来获取/移除头部?“领带被任意打断”意味着PQ在看到领带时可以做任何它想做的事情,包括随机洗牌您的输入。我每次都使用poll()方法来获取/移除头部。Struc类只是一个点类。请添加
Struc
的代码,以及用于在队列中放置/检索值的代码。您是使用
迭代器迭代这些值,还是使用
poll()
获取/移除头部ev
Comparator<struc> cmp= new Comparator<struc>() {
  public int compare(struc e1, struc e2) {
    return e1.x - e2.x;
  }
};