整数数据如何插入优先队列(顺序看不懂)
How Integer Data get Inserted in Prioroty Queue(Sequence Not able to undestand)
我正在学习 Collection 框架中 Java 的优先级队列。
目前我正在讨论优先队列这个话题。我参考了下面的article and this video来学习,然后我在IDE
上测试了代码
int ar[] = {3, 5, 12, 9, 1};
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int f:ar)
pq.add(f);
当我打印 pq 时,我得到 [1, 3, 12, 9, 5]
这个顺序是怎么排列的(这里的优先级是什么?)我没看懂,不是升序也不是降序。请指导
它存储为最小堆。详细了解最小堆
PriorityQueue
以自然顺序存储元素,除非在创建队列时提供 Comparator
。
int ar[] = {3, 5, 12, 9, 1};
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int f:ar)
pq.add(f);
System.out.println(pq);
结果是 [1, 3, 12, 9, 5]
,因为 AbstractCollection
class 的 toString
方法在打印队列时被调用。
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
class 中实现的,它没有 return 任何特定顺序的元素。因此,当您打印优先级队列时,它会无序地打印元素。
/**
* 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
我正在学习 Collection 框架中 Java 的优先级队列。
目前我正在讨论优先队列这个话题。我参考了下面的article and this video来学习,然后我在IDE
上测试了代码int ar[] = {3, 5, 12, 9, 1};
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int f:ar)
pq.add(f);
当我打印 pq 时,我得到 [1, 3, 12, 9, 5]
这个顺序是怎么排列的(这里的优先级是什么?)我没看懂,不是升序也不是降序。请指导
它存储为最小堆。详细了解最小堆
PriorityQueue
以自然顺序存储元素,除非在创建队列时提供 Comparator
。
int ar[] = {3, 5, 12, 9, 1};
PriorityQueue<Integer> pq = new PriorityQueue<>();
for(int f:ar)
pq.add(f);
System.out.println(pq);
结果是 [1, 3, 12, 9, 5]
,因为 AbstractCollection
class 的 toString
方法在打印队列时被调用。
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
class 中实现的,它没有 return 任何特定顺序的元素。因此,当您打印优先级队列时,它会无序地打印元素。
/**
* 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