当前位置: 首页 > 知识库问答 >
问题:

为什么PriorityQueue内部的值在Java中的poll方法之后会发生变化?[副本]

红弘盛
2023-03-14

这是代码,下面是输出,为什么值“5”和“6”,我的意思是在PriorityQueue中如何在轮询方法之后设置新的优先级(与队列中的其他元素类似)。我正在准备java认证考试,我总是倾向于选择错误的答案由于这个概念,任何帮助是欢迎的。

import java.util.*;

public class PriorityQueueDemo {
public static void main(String args[]) {
  // create priority queue
  PriorityQueue < Integer >  prq = new PriorityQueue < Integer > (); 

  // insert values in the queue
  for ( int i = 3; i  <  10; i++ ){  
     prq.add (new Integer (i)) ; 
  }

  System.out.println ( "Initial priority queue values are: "+ prq);

  // get the head from the queue
  Integer head = prq.poll();

  System.out.println ( "Head of the queue is: "+ head);

  System.out.println ( "Priority queue values after poll: "+ prq);
 }
}

输出:

Initial priority queue values are: [3, 4, 5, 6, 7, 8, 9]
Head of the queue is: 3
Priority queue values after poll: [4, 6, 5, 9, 7, 8]

共有1个答案

龚振
2023-03-14

值没有更改,只是以不同的顺序打印。
PriorityQueueToString()按照其迭代器返回元素的顺序返回元素。如果您阅读priorityqueue#iterator()的Javadoc,您会看到以下内容:

返回此队列中元素的迭代器。迭代器不以任何特定顺序返回元素。

因此,您不能从打印输出中得出任何结论,因为priorityqueue没有按优先级或其他任何特定顺序打印它们。

 类似资料:
  • 问题内容: 我阅读了文档以及可以找到的关于PriorityQueue的所有信息,但仍然不明白为什么输出如此奇怪,我的意思是我无法理解添加订单的意义,有人可以解释吗? 输出: 问题答案: 仅保证第一个元素最小。 甲 二进制堆仅在每个子HEAB(子树)保证根是最小的元素。 堆实际上是一个完整树(或它的数组表示形式)。每当您插入违反条件的元素(小于根)时,都会筛选旧根。这是在堆上递归完成的。 这种部分排

  • 我正在制作我的程序,为JavaSE的学校作业扔一个骰子(如骰子)。用户可以将一个字符作为标准输入,因此用户选择的字符将代表骰子的眼睛。有时当我打印结果时,它会显示一个完全不同的字符。 输出此程序将生成正确的结果。但偶尔输入的字符(代表模具的眼睛)会转换为数字。 在以下情况下,程序应打印9个“@”字符。相反,它在第一行打印192。(我知道骰子有6只眼睛,但我在无意中打印了9只眼睛时遇到了这个奇怪的输

  • 我想知道为什么输出值0。我认为如果一个变量没有初始化,它会输出一个垃圾值。 但是,我还记得听到整数的默认值为0,所以我有点困惑。 谢谢

  • 为什么打印(或其他一些随机数)?什么是 printing?为什么它不是 (或 )?

  • Java对象是在堆中创建的,为了在Java中进行垃圾收集,堆被分为三个部分或三代,它们被称为堆的年轻一代、终身或老一代和永久区域。新一代被进一步划分为三个部分,称为伊甸园空间、幸存者1和幸存者2空间。当第一次在堆中创建的对象在Eden space内的新一代中创建时,如果对象幸存,则在后续的次要垃圾收集之后,在主要垃圾收集将该对象移动到旧代或终身代之前,将其移动到幸存者1,然后移动到幸存者2。 阅读