Java 整数数据如何插入优先级队列(序列无法撤消)
我正在学习收集框架中Java的优先级队列 目前我的主题是优先级队列。我参考了下面的内容,然后在IDE上测试了代码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
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