import java.util.Queue;
import java.util.PriorityQueue;
class Main{
public static void main(String[] args) {
Queue<Integer> q=new PriorityQueue<>();
q.add(34);
q.add(1);
q.add(2);
q.add(3);
q.add(4);
q.add(5);
System.out.println(q);
}
}
输出:
[1, 3, 2, 34, 4, 5]
我尝试过并得到了解决方案,但我想看看其他人的观点和解决方案。
在 Java 中,当您在
System.out.println(q);
上调用 PriorityQueue
时,它会在内部调用 toString()
类的 PriorityQueue
方法。
详细解释如下:
toString()
方法toString()
的 PriorityQueue
方法,该方法将队列的元素转换为字符串表示形式。toString()
方法不对PriorityQueue
的元素进行排序。相反,它打印堆的内部数组表示。该数组反映了堆的当前结构,而不是队列的自然顺序。PriorityQueue
的输入元素是 (34, 1, 2, 3, 4, 5)
,则堆会组织元素以维护堆属性。是的,这是一个很好的问题。首先我们知道什么是priorityQueue: 它是 java.util 包中的预定义类,从 Jdk 1.5 开始提供。 它根据优先级 HEAP(使用二叉树)插入元素。 优先级队列不允许空元素,并且它使用二叉树插入元素。 现在我们将讨论这个计划:
队列 q=new PriorityQueue<>();
q.add(34);
q.add(1);
q.add(2);
q.add(3);
q.add(4);
q.add(5);
System.out.println(q);
这里我们插入 6 个整数对象,现在它将通过二叉树存储,正如我们所知 步骤1)首先我们插入34,这样它将作为根
34
/\
步骤 2) 1 和 2
34
/\
1 2
这里 1 小于 root,所以 1 将转到 Root
步骤3)插入3
1
/
34 2
/
3
这里 3 小于 34 所以 3 将进入顶部
步骤 4) 插入 4
1
/\
34 2
/\
3 4
1
/\
3 2
/\
34 4
第5步)插入5 5将向右交换以维持二叉树结构
1
/\
3 2
/\ \
34 4 5
现在从左到右阅读 1 3 2 34 4 5