Java 整数数据如何插入优先级队列(序列无法撤消)

Java 整数数据如何插入优先级队列(序列无法撤消),java,collections,priority-queue,Java,Collections,Priority Queue,我正在学习收集框架中Java的优先级队列 目前我的主题是优先级队列。我参考了下面的内容,然后在IDE上测试了代码 int ar[] = {3, 5, 12, 9, 1}; PriorityQueue<Integer> pq = new PriorityQueue<>(); for(int f:ar) pq.add(f); intar[]={3,5,12,9,1}; PriorityQueue pq=新的PriorityQueue(); for(int f:ar) pq

我正在学习收集框架中Java的优先级队列

目前我的主题是优先级队列。我参考了下面的内容,然后在IDE上测试了代码

int ar[] = {3, 5, 12, 9, 1};
PriorityQueue<Integer>  pq = new PriorityQueue<>();
for(int f:ar)
pq.add(f);
intar[]={3,5,12,9,1};
PriorityQueue pq=新的PriorityQueue();
for(int f:ar)
pq.增加(f);
当我打印pq时,我得到[1,3,12,9,5]


这个顺序是如何安排的(这里的优先级是什么?)我不理解,因为它不是递增顺序或递减顺序。请引导

它存储为最小堆。阅读有关最小堆的详细信息

PriorityQueue
以自然顺序存储元素,除非在创建队列时提供了
比较器

int ar[] = {3, 5, 12, 9, 1};
PriorityQueue<Integer>  pq = new PriorityQueue<>();
for(int f:ar)
  pq.add(f);
System.out.println(pq);
public String toString() {
  Iterator<E> it = iterator();
  if (! it.hasNext())
    return "[]";

  StringBuilder sb = new StringBuilder();
  sb.append('[');
  for (;;) {
    E e = it.next();
    sb.append(e == this ? "(this Collection)" : e);
    if (! it.hasNext())
      return sb.append(']').toString();
    sb.append(',').append(' ');
  }
}
这里使用的
iterator()
是在
PriorityQueue
类中实现的,该类不以任何特定顺序返回元素。因此,当您打印优先级队列时,它不按任何顺序打印元素

/**
 * Returns an iterator over the elements in this queue. The iterator
 * does not return the elements in any particular order.
 *
 * @return an iterator over the elements in this queue
 */
public Iterator<E> iterator() {
    return new Itr();
}

优先考虑的是让最上面的元素的数量最少
int ar[] = {3, 5, 12, 9, 1};
PriorityQueue<Integer>  pq = new PriorityQueue<>(ar.length);
for(int f:ar)
  pq.add(f);

while(!pq.isEmpty())
  System.out.println(pq.poll());
1
3
5
9
12