堆(优先级队列 PriorityQueue)

简介: 堆(优先级队列 PriorityQueue)

堆(优先级队列 PriorityQueue)

通过题目讲解

题目链接博客:合并果子(优先级队列)

提交代码

import java.io.*;
import java.util.*;
public class Main
{ 
  public static void main(String[] args) {
    Scanner in = new Scanner(System.in);
    PriorityQueue<Integer> q = new PriorityQueue<Integer>();
    int n = in.nextInt();
    for (int i = 0; i < n; ++ i)
    {
      q.add(in.nextInt());
    }
    int sum = 0;
    while(q.size()>1)
    {
      int a = q.poll();
      int b = q.poll();
      sum += a + b;
      q.add(a + b);
    }
    System.out.println(sum);
  }
}

常用方法

和Queue一样

参考文档:队列(Queue)

遍历方式

public static void main(String[] args) {
    PriorityQueue<Integer> pqueue = new PriorityQueue<Integer>();     
    pqueue.add(100);
    pqueue.add(10);
    pqueue.add(11);
    pqueue.add(1);
    pqueue.add(646);
    System.out.println(pqueue);
    /*[1, 10, 11, 100, 646]*/
    for (Integer it : pqueue)
    {
      System.out.print(it + " ");
    }
    /*1 10 11 100 646 */
    System.out.println();
    Iterator<Integer> it = pqueue.iterator();
    while(it.hasNext())
    {
      System.out.print(it.next() + " ");
    }
    /*1 10 11 100 646 */
  }

排序

public static void main(String[] args) {
    // 默认排序规则是升序排列
    // 可以自定义排序规则
    PriorityQueue<Integer> pqueue = new PriorityQueue<Integer>(new Comparator<Integer>() {
      @Override
      public int compare(Integer o1, Integer o2) {
        int num = 0;
        if (o1 > o2) num = -1;
        else num = 1;
        return num;
      }
    });     
    pqueue.add(100);
    pqueue.add(10);
    pqueue.add(11);
    pqueue.add(1);
    pqueue.add(646);
    System.out.println(pqueue);
    /*[646, 100, 11, 1, 10]*/
  }
相关文章
|
5月前
|
存储 安全 索引
认真研究队列中的优先级队列PriorityQueue
认真研究队列中的优先级队列PriorityQueue
46 0
|
6月前
|
Java 调度
【PriorityQueue优先级队列及其应用】
【PriorityQueue优先级队列及其应用】
|
7月前
|
存储 安全 Java
数据结构优先级队列(堆)
数据结构优先级队列(堆)
56 1
|
1月前
|
存储 安全 Java
优先级队列(堆)
优先级队列(堆)
|
6月前
|
存储 算法
优先级队列(堆)&&  堆排序
优先级队列(堆)&&  堆排序
28 0
|
8月前
|
存储 Java
PriorityQueue优先级队列
PriorityQueue优先级队列
|
8月前
|
存储
优先级队列详解
优先级队列详解
76 0
|
10月前
|
存储 Java
基于堆的优先级队列
java自带的优先级队列默认是小顶堆,现在来写一个大顶堆的
62 0
|
10月前
|
存储 Java
优先级队列
优先级队列
|
人工智能 算法 搜索推荐
我学会了,封装自己的优先队列PriorityQueue
优先队列本身就是一种队列。 普通队列:先进先出、后进后出,如排队买票吃饭一样。 优先队列:出队顺序和入队顺序无关,和优先级相关。如去医院看病,床位非常的紧张,需要排队才能去做手术的话,此时做手术的这个队伍的顺序就是一个优先队列。因为医生是根据每一个患者的病症的不同以及需要这个手术的紧急程度的不同来去安排谁先做手术谁后做手术,也可以认为每一个患者是有一个优先级的。优先级高者先得,这样的一个队列就叫做优先队列,它和普通队列最主要的区别是在于出队这个操作上,入队很简单,但是优先级高的先出队。
184 0
我学会了,封装自己的优先队列PriorityQueue