PriorityQueue 如何存储和检索元素或数据? [已关闭]

问题描述 投票:0回答:2
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 oop collections queue priority-queue
2个回答
-1
投票

在 Java 中,当您在

System.out.println(q);
上调用
PriorityQueue
时,它会在内部调用
toString()
类的
PriorityQueue
方法。

详细解释如下:

1.调用
toString()
方法

  • 调用
    toString()
    PriorityQueue
    方法,该方法将队列的元素转换为字符串表示形式。

2.堆结构表示

  • toString()
    方法
    PriorityQueue
    的元素进行排序。相反,它打印堆的内部数组表示。该数组反映了堆的当前结构,而不是队列的自然顺序。

3.示例:

  • 如果
    PriorityQueue
    的输入元素是
    (34, 1, 2, 3, 4, 5)
    ,则堆会组织元素以维护堆属性。
  • 根据堆结构,生成的内部堆数组将如下所示: [1,3,2,34,4,5]

-2
投票

是的,这是一个很好的问题。首先我们知道什么是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

© www.soinside.com 2019 - 2024. All rights reserved.